背包九讲【模板】
本人水平有限,题解不到为处,请多多谅解
本蒟蒻谢谢大家观看
01背包:
1 01背包
2
3 memset(f,0,sizeof(f));
4 f[0]=0;
5 for(int i=1;i<=n;i++){
6 for(int j=m;k>=v[i];j--){
7 f[j]=max(f[j-v[i]]+val[i]);
8 }
9 }
完全背包:
1 完全背包
2
3 memset(f,0,sizeof(f));
4 f[0]=0;
5 for(int i=1;i<=n;i++){
6 for(int j=v[i];j<=m;j++){
7 f[j]=max(f[j-v[i]]+val[i]);
8 }
9 }
多重背包:
1 多重背包
2
3 memset(f,0,sizeof(f));
4 f[0]=0;
5 for(int i=1;i<=n;i++){
6 for(int j=1;j<=c[i];j++){
7 for(int k=m;k>=v[i];k--){
8 f[k]=max(f[k],f[k-v[i]]+val[i]);
9 }
10 }
11 }
分组背包:
1 分组背包
2
3 memset(f,0,sizeof(f));
4 f[0]=0;
5 for(int i=1;i<=n;i++){
6 for(int j=m;j>=0;j--){
7 for(int k=1;k<=c[i];k++){
8 if(j>=v[i][k]){
9 f[j]=max(f[j],f[j-v[i][k]]+val[i][k]);
10 }
11 }
12 }
13 }