考虑以下问题:
有
n
n
n种物品,第
i
i
i种有
Z
i
Z_i
Zi个,价值是
Y
i
Y_i
Yi,重量是
W
i
W_i
Wi,那么把这些物品放入大小为
X
X
X的背包,的最大价值是多少
(
n
,
Y
i
≤
50
W
i
,
Z
i
≤
1
0
9
)
(n,Y_i\leq 50\ \ \ \ W_i,Z_i\leq 10^9)
(n,Yi≤50 Wi,Zi≤109)
这个问题总重大,价值总和大没办法像之前那样dp。
可以贪心考虑:
按照效率:
Y
i
/
W
i
Y_i/W_i
Yi/Wi降序排序。
在最开始学背包的时候,会有一个错误的想法:对于权值为 vi,代价为 wi 的若干物品,我们计算出它们的性价比,贪心的选择其中性价比高的部分物品。这样之所以是错的,是由于物品不能分割,这样会有空闲的地方出现但又不能塞入更好的物品了。于是我们考虑:在什么样的情况下可以直接用性价比高的物品代替性价比低的物品呢?
假设两个物品
p
,
q
(
p
<
q
)
p,q(p<q)
p,q(p<q),那么如果q的个数大于
Y
p
Y_p
Yp,p还可以拿出
Y
q
Y_q
Yq个,则选择拿p的
Y
q
Y_q
Yq个去换q的
Y
p
Y_p
Yp个显然更优。
所以把每一个都分出来50个,这么多dp,剩下的贪心就ok了。