【问题标题】:Having trouble setting up dynamic programming设置动态规划时遇到问题
【发布时间】:2014-12-15 01:52:07
【问题描述】:

“学期快结束了,你有 n 个期末项目要完成。当然,你的目标是最大限度地提高这些项目的总成绩!为简单起见,假设你总共有 H 小时(a正整数)累积地处理项目,并且您将在每个项目上花费整数小时数。

为了弄清楚如何最好地分配您的时间,您提出了一组非递减估算 函数 {e1, e2, . . . , en},每个项目一个:如果您在项目 i 上花费 h 小时(其中 0

给出一个采用估计函数 {e1, . . . , en} 作为输入和 生成非负数小时 {h1, . . . , hn} 使得 (h1 +h2 +···+hn) = H 并且你的总成绩 (e1(h1) + e2(h2) +··· + en(hn)) 是最高的。要获得满分,请证明您的重复是合理的,并简要分析您的算法的运行时间。”

【问题讨论】:

  • 您的想法不会奏效,因为通常您无法为每个项目选择最大值,因为时间不够。你必须做出妥协
  • 我想这应该理解为e1(0)=...=en(0)=0?

标签: algorithm dynamic recursion dynamic-programming


【解决方案1】:

我相信问题可以通过以下方式解决。

动态程序的状态空间建模为n+1-tuples (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)产生结果。

【讨论】:

    【解决方案2】:

    这听起来有点像 cormen 在算法介绍中描述的对数切割问题。如果你没有,我建议把它捡起来。

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

    【讨论】:

      猜你喜欢
      • 2011-10-17
      • 2012-04-09
      • 1970-01-01
      • 2011-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多