代码随想录 - 背包问题
vector<int> weight = {1, 3, 4};
vector<int> value = {15, 20, 30};
int bagWeight = 4;
// 01背包 如果先遍历背包 后遍历物品 那就是每个包只会装一个物品
for(int j = bagWeight; j >= 0; j--) {
for(int i = 0; i < weight.size(); i++) { // 遍历物品
// 遍历背包容量
if (j>=weight[i])
dp[j] = max(dp[j], dp[j - weight[i]] + value[i]);
}
for (auto i : dp) cout << i << " ";
cout << endl;
}
上面的dp
0 0 0 0 30
0 0 0 20 30
0 0 15 20 30
0 15 15 20 30
0 15 15 20 30
完全背包的排列和组合的区别
https://programmercarl.com/0518.零钱兑换II.html#思路
class Solution {
public:
vector<int> coins= {1, 2, 5};
int amount = 5;
int change(int amount, vector<int>& coins) {
vector<int> dp(amount + 1, 0);
dp[0] = 1;
for (int i = 0; i < coins.size(); i++) { // 遍历物品
for (int j = coins[i]; j <= amount; j++) { // 遍历背包
dp[j] += dp[j - coins[i]];
}
}
return dp[amount];
}
};
上面是组合, dp是
j = 1, coin[i] = 1, dp: 1 1 0 0 0 0
j = 2, coin[i] = 1, dp: 1 1 1 0 0 0
j = 3, coin[i] = 1, dp: 1 1 1 1 0 0
j = 4, coin[i] = 1, dp: 1 1 1 1 1 0
j = 5, coin[i] = 1, dp: 1 1 1 1 1 1
j = 2, coin[i] = 2, dp: 1 1 2 1 1 1
j = 3, coin[i] = 2, dp: 1 1 2 2 1 1
j = 4, coin[i] = 2, dp: 1 1 2 2 3 1
j = 5, coin[i] = 2, dp: 1 1 2 2 3 3
j = 5, coin[i] = 5, dp: 1 1 2 2 3 4
class Solution {
public:
vector<int> coins= {1, 2, 5};
int amount = 5;
int change(int amount, vector<int>& coins) {
vector<int> dp(amount + 1, 0);
dp[0] = 1;
for (int j = 0; j <= amount; j++) { // 遍历背包容量
for (int i = 0; i < coins.size(); i++) { // 遍历物品
if (j - coins[i] >= 0) {
dp[j] += dp[j - coins[i]];
for (auto i : dp) cout << i << " ";
cout << endl;
}
}
}
return dp[amount];
}
};
上面是排列,dp是
j = 1, coin[i] = 1, dp: 1 1 0 0 0 0
j = 2, coin[i] = 1, dp: 1 1 1 0 0 0
j = 2, coin[i] = 2, dp: 1 1 2 0 0 0
j = 3, coin[i] = 1, dp: 1 1 2 2 0 0
j = 3, coin[i] = 2, dp: 1 1 2 3 0 0
j = 4, coin[i] = 1, dp: 1 1 2 3 3 0
j = 4, coin[i] = 2, dp: 1 1 2 3 5 0
j = 5, coin[i] = 1, dp: 1 1 2 3 5 5
j = 5, coin[i] = 2, dp: 1 1 2 3 5 8
j = 5, coin[i] = 5, dp: 1 1 2 3 5 9
种一棵树最好的时间是十年前,其次是现在。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?