〈一〉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];
}
}
}
注释:dp指的是状态转移方程式,c是第i个物品的体积,w指的是第i个物品的重量为多少