01背包
for(i=0;i<n;i++){
for(j=m;j>=a[i].w;j--){
dp[j]=max(dp[j],dp[j-a[i].w]+a[i].v);
}
}
完全背包
for(i=0;i<n;i++){
for(j=a[i].w;j<=m;j++){
dp[j]=max(dp[j],dp[j-a[i].w]+a[i].v);
}
}
多重背包
for(i=0;i<n;i++){
for(j=m;j>=a[i].w;j--){
for(k=0;k<=min(j/a[i].w,a[i].num);k++){
dp[j]=max(dp[j],dp[j-k*a[i].w]+k*a[i].v);
}
}
}
分组背包
for(i=0;i<n;i++){
for(j=0;j<num[i];j++){
for(p=m;p>=g[i][j].w;p--){
dp[i][p]=max(dp[i][p],dp[i][p-g[i][j].w]+g[i][j].v);//每组挑多个
dp[i][p]=max(dp[i][p],dp[i-1][p-g[i][j].w]+g[i][j].v);//每组挑一个
}
}
}