我在代码随想录|写代码Day36 | 动态规划| 494.目标和, 518.零钱兑换II, 377. 组合总和 Ⅳ
🔥博客介绍`: 27dCnc
🎥系列专栏: <<数据结构与算法>> << 算法入门>> << C++项目>>
🎥 当前专栏: <<数据结构与算法>>
专题 : 数据结构帮助小白快速入门算法
👍👍👍👍👍👍👍👍👍👍👍👍
☆*: .。. o(≧▽≦)o .。.:*☆
❤️感谢大家点赞👍收藏⭐评论✍️
学习目标:
今日学习打卡
- 代码随想录 - 动态规划
学习时间:
- 周一至周五晚上 7 点—晚上9点
- 周六上午 9 点-上午 11 点
- 周日下午 3 点-下午 6 点
学习内容:
- 一和零
- 零钱兑换II
- 掌握条件语句
- 掌握循环语句
内容详细:
474.一和零
多重背包是每个物品,数量不同的情况。本题中strs 数组里的元素就是物品,每个物品都是一个!而m 和 n相当于是一个背包,两个维度的背包。理解成多重背包的同学主要是把m和n混淆为物品了,感觉这是不同数量的物品,所以以为是多重背包。但本题其实是01背包问题!只不过这个背包有两个维度,一个是m 一个是n,而不同长度的字符串就是不同大小的待装物品。
代码
class Solution {
public:
// m + n 是体积但是这个体积 1 是重量
int findMaxForm(vector<string>& strs, int m, int n) {
vector<vector<int>> dp(m + 1,vector<int>(n + 1, 0)); //默认初始化为0
for (string str : strs) { //遍历物品
int oneNum = 0,zeroNum = 0;
for (char c : str) {
if (c == '0') zeroNum++; //t统计单个物品中 0 和 1 的背包数量
else oneNum++;
}
for (int i = m; i >= zeroNum; i--) { //遍历背包容量而且从后向前遍历
for (int j = n; j >= oneNum; j--) {
dp[i][j] = max(dp[i][j], dp[i - zeroNum][j - oneNum] + 1);
}
}
}
return dp[m][n];
}
};
518.零钱兑换II
思路:
这是一道典型的背包问题,一看到钱币数量不限,就知道这是一个完全背包。
代码
class Solution {
public:
int change(int amount, vector<int>& coins) {
int sum = 0;
//这个是物品数 N 背包体积amount
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];
}
};
377. 组合总和 Ⅳ
解题思路:
通过动态规划将全部等于target的数列举, 与数位dp相近但与之不同, 属于完全背包类问题
代码
class Solution {
public:
int combinationSum4(vector<int>& nums, int target) {
vector<int>dp(target + 1,0);
dp[0] = 1;
for (int i = 0; i <= target; i++) { // 遍历背包
for (int j = 0; j < nums.size(); j++) { // 遍历物品
if (i - nums[j] >= 0 && dp[i] < INT_MAX - dp[i - nums[j]]) {
dp[i] += dp[i - nums[j]];
}
}
}
return dp[target];
}
};
学习产出:
- 技术笔记 2 遍
- CSDN 技术博客 3 篇
- 习的 vlog 视频 1 个
算法交流群建立成功, 如果对算法感兴趣可以加入QQ群领取算法资料进行交流: 787936200
本文作者:2c237c6
本文链接:https://www.cnblogs.com/27dCnc/p/18568601
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步