01:
1.基础题型,
伪代码:
i= 1 to n
j= W to 1
f[j]=max{f[j-w[i]]+v[i]};
2.W超大,n=20版;
思路:折半枚举,先枚举前十个的选物情况,记录,再枚举后十个的,累计即可。
3.W超大,n正常,V较小
思路:改变f[j]的定义,设f[j]表示要取价值总和为j的物品最少需要多少多少包重,结果就是最大的使f[j]<=W的j。
伪代码:
i= 1 to n
j=V to 1
f[j]=min{f[j-v[i]]+w[i]};
完全背包:
1.基础题型:
伪代码:
i=1 to n
j=1 to W
f[j]=max{f[j-w[i]]+v[i]}
2,3.同上的01背包,只需将循环顺序改一下即可