我们在进行背包问题的解析肘有多种情况,以下为代码:
01背包:
for(int i = 1;i<=N;i++){
for(int j = 0;j <= V;j++){
if(j >= c[i]){
dp[i][j] = max(dp[i - 1][j - c[i]] + w[i],dp[i - 1][j]);
}else{
dp[i][j] = dp[i - 1][j];
}
}
}
多重背包:
for(int i = 1;i <= N;i++){
for(int j = 0;j <= N;j++){
for(int k = 0;k <= n[i];k++){
if(j >= c[i] * k){
dp[i][j] = max(dp[i - 1][j - c[i]*k] + w[i] * k,dp[i][j]);
}
}
}
}
完全背包:
for(int i = 1;i<=N;i++){
for(int j = 0;j <= V;j++){
if(j >= c[i]){
dp[i][j] = max(dp[i]j - c[i] + w[i],dp[i - 1][j]);
}else{
dp[i][j] = dp[i - 1][j];
}
}
}