我们有一系列项目1,...,n,每个项目都有一个分数(i)。如果我们选择一个项目,那么我们不能选择i + 1,... i + rest(i)项。目标是最大化总分。以最大增益顺序跳转 - 动态编程
我们可以用动态规划解决这个问题。
对于第一项我们有两个选项。或选择它并转到其余(1)+ 1项目或不选择它并转到第二项目。
的递归函数:
c[i] = max{ c[i - 1], c[i + rest(i) + 1] + score(i) }
与此递归函数的问题是,它的子问题意味着子问题之间创建周期不是独立的。
我认为这将是理想的有类似
c[i] = max{ c[i - 1], c[i - itemThatWentToItem(i)] + score(i) }
也许一个解决办法是有一个功能,让所有导致项目我,然后把它们之间的最大比分的项目。
另一个想法是将此问题转换为DAG中的最长路径,并针对所有子图执行此操作。
任何想法?
从端计算它:C [1] = MAX {C [1 + 1],C [1 +其余(ⅰ)+ 1] +评分(i)} – Ante
愚蠢的问题,但我可以在递归函数中做到这一点?最后的解决方案是c [0]? – Laxmana