01背包 | 每个物品只能使用一次 | 完全背包 | 物品重复使用 | ||||||||||||
//方法1先背包,后物品 | //方法1先背包,后物品 | ||||||||||||||
for(int j = 0; j <= bagweight; j++) { // 遍历背包容量 | for(int j = 0; j <= bagweight; j++) { // 遍历背包容量 | ||||||||||||||
for(int i = 1; i < weight.size(); i++) { // 遍历物品 | for(int i = 1; i < weight.size(); i++) { // 遍历物品 | ||||||||||||||
if (j < weight[i]) dp[i][j] = dp[i - 1][j]; | if (j < weight[i]) dp[i][j] = dp[i - 1][j]; | ||||||||||||||
else dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]); | else dp[i][j] = max(dp[i - 1][j], dp[i ][j - weight[i]] + value[i]); | ||||||||||||||
} | } | ||||||||||||||
//方法2先物品后背包 | //方法2先物品后背包 | ||||||||||||||
for(int i = 1; i < weight.size(); i++) { // 遍历物品 | for(int i = 1; i < weight.size(); i++) { // 遍历物品 | ||||||||||||||
for(int j = 0; j <= bagweight; j++) { // 遍历背包容量 | for(int j = 0; j <= bagweight; j++) { // 遍历背包容量 | ||||||||||||||
if (j < weight[i]) dp[i][j] = dp[i - 1][j]; | if (j < weight[i]) dp[i][j] = dp[i - 1][j]; | ||||||||||||||
else dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]); | else dp[i][j] = max(dp[i - 1][j], dp[i ][j - weight[i]] + value[i]); | ||||||||||||||
} | } | ||||||||||||||
//方法3一维数组 只能先物品后背包,并且背包要倒序 | 一维数组1 | ||||||||||||||
for(int i = 0; i < weight.size(); i++) { // 遍历物品 | // 先遍历背包,再遍历物品 | ||||||||||||||
for(int j = bagWeight; j >= weight[i]; j--) { // 遍历背包容量 | for(int j = 0; j <= bagWeight; j++) { // 遍历背包容量 | ||||||||||||||
dp[j] = max(dp[j], dp[j - weight[i]] + value[i]); | for(int i = 0; i < weight.size(); i++) { // 遍历物品 | ||||||||||||||
} | if (j - weight[i] >= 0) dp[j] = max(dp[j], dp[j - weight[i]] + value[i]); | ||||||||||||||
} | } | ||||||||||||||
} | |||||||||||||||
一维数组2 | |||||||||||||||
for(int i = 0; i < weight.size(); i++) { // 遍历物品 | |||||||||||||||
for(int j = weight[i]; j <= bagWeight; j++) { // 遍历背包容量 | |||||||||||||||
dp[j] = max(dp[j], dp[j - weight[i]] + value[i]); | |||||||||||||||
} | |||||||||||||||
} | |||||||||||||||
01背包与完全背包
最新推荐文章于 2024-07-08 22:12:26 发布