无法设置动态编程

时间:2014-10-20 06:25:03

标签: algorithm dynamic recursion dynamic-programming

“这已接近学期结束,你有最后的项目需要完成。当然,你的目标是最大限度地提高你在这些项目上的总成绩!为简单起见,说你有总共H小时(a累积整数项目,你将在每个项目上花费整数小时。

要弄清楚如何最好地划分时间,你会得出一组非递减估计 函数{e1,e2 ,. 。 。 ,en},每个项目一个:如果你在项目i上花费h小时(其中0 <= h <= H),你将获得该项目的ei(h)等级。

给出一个动态编程算法,该算法采用估计函数{e1 ,. 。 。 ,en}作为输入和 产生非负数小时{h1 ,. 。 。 ,hn}使得(h1 + h2 +···+ hn)= H并且你的总等级(e1(h1)+ e2(h2)+···+ en(hn))是最大的。要获得满分,请证明您的重现,并简要分析算法的运行时间。“

2 个答案:

答案 0 :(得分:0)

这听起来像是cormen在算法介绍中描述的日志切割问题。如果你没有它,我建议你把它拿起来。

这是一个在线参考,但我相信你可以找到其他人。 http://www.geeksforgeeks.org/dynamic-programming-set-13-cutting-a-rod/

答案 1 :(得分:0)

我认为问题可以解决如下。

动态程序的状态空间被建模为n+1 - 元组 (h,h1,...hn)总共h小时为e1(h1)+...+en(hn)小时e1(0),...,en(0)。对于初始化,请将状态值设置为h=0,其中0(此值应为h,否则未明确说明。)

然后以递增的顺序迭代h;在直觉上,正如e1,...,en内容,你允许一个单位更多的时间来解决问题。由于效用函数h+1单调递增,问题是决定应该花费多少时间单位。这意味着对于(h+1,h1+1,h2,...,hn),...,(h+1,h1,h2,...,hn+1)e1,...en的值必须由h=H进行评估;最大值的选择将被存储。

最后,最后一个元组({{1}})产生结果。