【问题标题】:Maximization using Dynamic Programming使用动态规划最大化
【发布时间】:2012-11-12 04:37:04
【问题描述】:

我正在尝试为类似于以下问题的问题提出解决方案:

  • 令 M 为 n 行 T 列的矩阵。
  • 让每一行都有正的非递减值。 (例如,行 = [1, 2, 30, 30, 35])
  • 让 M[i][j] 对应于在考试 i 上花费 j 单位时间获得的分数。

使用动态规划,解决问题,以找到花费 T 单位时间学习的最佳方式,从而获得最高总分。

提前感谢您的帮助:)

我的尝试:

S[][] = 0

for i = 1:n
   for j = 0:T
       max = 0
       for k = 0:j
           Grade = G[i][j]+ S[i-1][T-k]
           if Grade > max
              max = Grade
       end for
       S[i][j] = max
    end for
end for

【问题讨论】:

    标签: algorithm optimization dynamic-programming


    【解决方案1】:

    S[i][j] 代表您在第一次i 考试上花费j 单位时间可以达到的最佳分数。您可以通过查看S[i-1][k] 的每个k 值来计算S[i][j]。对于S 的每个元素,请记住前一行中给出最佳结果的k 的值。对于及时学习所有考试T 的最佳分数的答案是S[n][T],您可以使用您记得的k 的值来确定每次考试花费多少时间。

    S[][] = 0
    
    for j = 0:T
       S[0][j] = M[0][j]
    
    for i = 1:n
       for j = 0:T
           max = 0
           for k = 0:j
               # This is the score you could get by spending j time, spending
               # k time on this exam and j-k time on the previous exams.
               Grade = S[i-1][j-k] + M[i][k]
               if Grade > max
                  max = Grade
           end for
           S[i][j] = max
        end for
    end for
    

    【讨论】:

    • 你能用伪代码的形式表达这个想法吗?我一直在尝试写类似的东西,但我很困惑,它让我无处可去......
    • @Pi_:你能在你的问题中添加一个你尝试过的例子吗?
    • @Pi_:我添加了一些与您类似的伪代码,我认为效果更好。
    • 我把头绕过去了,谢谢! (有一个小错字,应该是 j = 0:T)。
    • @VaughnCato, for i = 1:n(矩阵索引从 0 开始)不会迭代 n-row 矩阵,而是 n+1-row 矩阵。与for j = 0:T 同上,这是一个T+1 列矩阵。 :)
    【解决方案2】:

    我假设你的问题中的 vy G 和 M 是同一个意思,如果你根本没有花时间参加考试,你会得到 0 分。

    在这种情况下,我会将 DP 矩阵定义为 D[i,t] = 通过在从 0 到 i 的考试子集上花费 t 个总单位时间可实现的最佳分数。

    W.l.o.g.您可以假设矩阵的第一列全为 0。

    在这种情况下,您可以观察到 D 满足以下递归:

    • D[0, t] = M[0, t]
    • D[i, t] = max_{0

    这是你应用动态规划所需要的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-16
      • 2015-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多