【问题标题】:Formulating a knapsack style solution for spoj "BEHAPPY"?为 spoj“BEHAPPY”制定背包式解决方案?
【发布时间】:2016-01-25 12:57:40
【问题描述】:

问题在problem 进行了描述,我一直在尝试对上述问题进行迭代 dp 解决方案。 从我的编码经验中我可以猜到,它应该具有三个维度,每个状态由以下唯一标识:-

M = Gifts not distributed yet.
N = first N girlfriends available (Similar to 0-1 Knapsack)
C = Maximum gifts allowable for current girlfriend.  

现在初始化 M=0,N,C(即当还有 0 个礼物要分发时)

      1 2 3 4 (girlfriends)
    0
    1
    2
    3
   (Capacity)

我似乎有一个问题,在 k=0 时初始化,因为对于女朋友都有一个低和高的礼物限制,因此偏离了只有最大限制的标准背包(不考虑背包找到最佳解决方案,这里我考虑所有可能的解决方案)

当然我这里可能完全走错了路,如果你觉得是这样的话,这3个状态变量dp的递归和初始化是什么?

提前致谢

【问题讨论】:

    标签: algorithm logic dynamic-programming


    【解决方案1】:

    首先删除所有最低要求。 M -= sum(A[i])B[i] -= A[i]。这些是最小值,所以我们没有什么可以移动的,只需分配它们并将它们从计算中取出。

    现在您的解决方案矩阵sol[g, m] 是您在剩下 m 个礼物的情况下可以解决前 g 个女朋友的方法数。 sol[g,m] = sum(sol[g-1, m-j], j= [0..B[g-1]]。用 1 初始化 sol[0, M],其余为 0。 您的解决方案将是 sol[N+1, 0]。

    如果你迭代地做,你只需要最后一行。

    【讨论】:

    • 能否请您“用 1 初始化 sol[0, M],其余为 0。”详细说明一下,初始化 sol[0, M] =1 在实际中是什么意思。谢谢
    • 实际上是的,除非您使用默认情况下不保证 0 的分配方法(即 C 中的 malloc 为您提供之前内存中的任何内容)。大多数语言,库默认使用 0 初始化内存。您可以随时查看文档。
    猜你喜欢
    • 1970-01-01
    • 2018-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多