动态编程实践算法

时间:2015-06-07 23:56:47

标签: algorithm dynamic-programming

我正在尝试找到针对以下问题的递归关系和算法,但已经停留了几天:

总共 H > n n 学校项目中工作的时间(所有这些都在同一时间到期),您现在想要决定将此时间分开。为简单起见,假设 H 是一个正整数,并且您将在每个项目上花费整数个小时。你已经提出了一组函数 f 1 ,..., f n (粗略估计)当然)这样在项目上工作 x 小时我会得到 f i x )关于那个项目。

可以假设 f i x )如果 x 增加并且每个项目都将减少,则不会减少评分从1到100。

所以,鉴于 H f 1 ,..., f n ,您需要确定每个项目将花费多少(整数)小时,以便您的平均成绩尽可能大(最高成绩)。

  • 查找 G [ H j ]的重复关系,其中 G [ H < / em>, j ]是在课程1,2,...的项目上花费 H 小时获得的成绩总和 j < / em>的
  • 查找计算 G [ H n ]的动态编程算法

有没有人有想法?

1 个答案:

答案 0 :(得分:1)

我认为这样可行:

G[H<0, j] = -Infinity
G[H, 0] = 0
G[H, j] = max(G[H-i, j-1]+f_j(i)) for 0<=i<=H

在复发中,我试图找到项目j的最佳工作小时数。该解决方案是O(H ^ 2 * n)。