问题在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的重复和初始化是什么?
提前致谢
答案 0 :(得分:1)
首先删除所有最低要求。 M -= sum(A[i])
和B[i] -= A[i]
。这些是最小的,因此我们无需四处移动,只需分配它们并将它们从计算中取出。
现在你的解决方案矩阵sol[g, m]
是你可以在剩下礼物的同时解决第一批女朋友的方式。 sol[g,m] = sum(sol[g-1, m-j], j= [0..B[g-1]]
。用1初始化sol [0,M],其余为0。
你的解决方案是sol [N + 1,0]。
如果你反复进行,你只需要最后一行。