模板汇总
一、背包问题
(一)01背包(每个物品最多只能放一次)
模板1:
for(int i=1; i<=n; i++) { for(int j=V; j>=1; j--) { f[i][j] = f[i-1][j]; if(v[i] <= j) { f[i][j] = max(f[i][j], f[i-1][j-v[i]] + w[i]); } } }
模板2:
for(int i=1; i<=n; i++) { for(int j=V; j>=1; j--) { if(v[i] <= j) f[j] = max(f[j], f[j-v[i]] + w[i]); } }
(二)完全背包(一个物品可以放无数次)
模板一:
for(int i=1; i<=n; i++)
{
for(int j=V; j>=1; j--)
{
for(int k=1; k*v[i]<=j; k++)
{
f[i][j] = max(f[i][j], f[i-1][j]);
f[i][j] = max(f[i][j], f[i-1][j-k*v[i]] + k*w[i]);
}
}
}
模板二:
for(int i=1; i<=n; i++) { for(int j=V; j>=1; j--) { for(int k=1; k*v[i]<=j; k++) { f[j] = max(f[j], f[j-k*v[i]] + k*w[i]); } } }

浙公网安备 33010602011771号