代码随想录算法训练营第41天 [01背包的理论基础,二维数组解法,一维数组解法,416. 分割等和子集]

代码随想录算法训练营第41天 [01背包的理论基础,二维数组解法,一维数组解法,416. 分割等和子集]


一、01背包的二维数组解法

链接: 代码随想录.
思路:dp数组, dp[i][j]代表行李箱空间为j的情况下,从下标为[0, i]的物品里面任意取,能达到的最大价值,递推公式为 dp[i][j] = max(dp[i-1][j],dp[i-1][j-weight[i]]+value[i])
做题状态:看解析后做出来了

//二维dp数组实现
#include <bits/stdc++.h>
using namespace std;int n, bagweight;// bagweight代表行李箱空间void solve() {vector<int> weight(n, 0); // 存储每件物品所占空间vector<int> value(n, 0);  // 存储每件物品价值for(int i = 0; i < n; ++i) {cin >> weight[i];}for(int j = 0; j < n; ++j) {cin >> value[j];}// dp数组// dp[i][j]代表行李箱空间为j的情况下,从下标为[0, i]的物品里面任意取,能达到的最大价值vector<vector<int>> dp(n,vector<int>(bagweight+1,0));for(int j = 0 ;j<=bagweight;j++){if(j >= weight[0]){dp[0][j] = value[0];}}for(int i = 1;i<n;i++){for(int j = 0;j<=bagweight;j++){if(weight[i]>j){dp[i][j] = dp[i-1][j];}else{dp[i][j] = max(dp[i-1][j],dp[i-1][j-weight[i]]+value[i]);}}}cout << dp[n-1][bagweight] <<endl;
}int main() {while(cin >> n >> bagweight) {solve();}return 0;
}

二、01背包的一维数组解法

链接: 代码随想录.
思路:
一维数组实现 dp数组的含义 dp[j] 在背包大小为j时的最大价值
二维数组的递推公式为 dp[i][j] = max(dp[i-1][j],dp[i-1][j-weight[i]+value[i])
一维数组的递推公式为 dp[j] = max(dp[j],dp[j-weight[i]+value[i])
一维数组的解法里,必须先遍历物品,再遍历背包
并且遍历背包的时候必须时倒序
j代表空间,空间必须比我选择的物品i的容量要大,所以时j>=weight[i]
做题状态:看解析后做出来了

//二维dp数组实现
#include <bits/stdc++.h>
using namespace std;int n, bagweight;// bagweight代表行李箱空间void solve() {vector<int> weight(n, 0); // 存储每件物品所占空间vector<int> value(n, 0);  // 存储每件物品价值for(int i = 0; i < n; ++i) {cin >> weight[i];}for(int j = 0; j < n; ++j) {cin >> value[j];}//一维数组实现 dp数组的含义 dp[j] 在背包大小为j时的最大价值//二维数组的递推公式为 dp[i][j] = max(dp[i-1][j],dp[i-1][j-weight[i]+value[i])//一维数组的递推公式为 dp[j] = max(dp[j],dp[j-weight[i]+value[i])vector<int> dp(bagweight+1,0);//一维数组的解法里,必须先遍历物品,再遍历背包//并且遍历背包的时候必须时倒序//j代表空间,空间必须比我选择的物品i的容量要大,所以时j>=weight[i]for(int i = 0;i<n;i++){for(int j = bagweight;j>=weight[i];j--){dp[j] = max(dp[j],dp[j-weight[i]]+value[i]);}}cout << dp[bagweight] <<endl;
}int main() {while(cin >> n >> bagweight) {solve();}return 0;
}

三、416. 分割等和子集

链接: 代码随想录.
思路:把问题转化为01背包,
相当于从nums里取数,重量 = 价值 = 数值
有一个大小为target的背包,能不能将背包装满
做题状态:看解析后做出来了

class Solution {
public:bool canPartition(vector<int>& nums) {vector<int> dp(10001, 0);int sum = 0;for (int n : nums) {sum += n;}if (sum % 2 == 1) {return false;}int target = sum / 2;// 相当于从nums里取数,重量 = 价值 = 数值// 有一个大小为target的背包,能不能将背包装满for (int i = 0; i < nums.size(); i++) {for (int j = target; j >= nums[i]; j--) {dp[j] = max(dp[j], dp[j - nums[i]] + nums[i]);}}return dp[target] == target;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/856832.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

本次刷题的错题模版分析-2024年6月21日

对于错题进行分析是一个非常好的学习习惯&#xff0c;这有助于你理解自己的错误并避免将来再次犯同样的错误。以下是一个错题分析的模板&#xff0c;你可以根据自己的需要进行调整&#xff1a; 1. 错题记录 题目&#xff1a;[下列关于数组运算的描述错误的是( )。 在NumPy中&am…

C# —— 属性和字段

属性和字段的区别 1.都是定义在一个类中&#xff0c;属于类成员变量 2.字段一般都是私有的private&#xff0c;属性一般是公开的Public 3.字段以小驼峰命名方式 age&#xff0c;属性一般是以大驼峰命名 Age 4.字段可以存储数据&#xff0c;属性不能存储数据&#xff0c;通过属性…

audacity音频处理

1.安装 Audacity | Free Audio editor, recorder, music making and more! 添加OpenVINO插件: https://zhuanlan.zhihu.com/p/676542556 2.使用 2.1注意事项 1.编辑音频,点击左上方打开或导入都可以;打开视频文件则需要安装ffmpeg模块,打开后只显示视频中的音频信息; 2.编辑…

P5712 【深基3.例4】Apples

1. 题目链接 https://www.luogu.com.cn/problem/P5712 P5712 【深基3.例4】Apples 2. 题目描述 题目描述&#xff1a;小B吃了x个苹果&#xff0c;用Today, I ate x apple.造句 输入&#xff1a;输入一个自然数x 输出&#xff1a;句子 3. 我的思考 用if-else判断就行 4. 我提交…

可变分区管理 分区分配算法

First Fit Algorithm Best Fit Algorithm FFA&#xff1a;按照分区编号找到第一个能装下进程的起始地址填入第二个表 此时 原表中将起始地址进程大小 分区大小-进程大小 如此继续 BFA&#xff1a;按分区大小排序 从小到大 找到第一个能装下的 剩余步骤和FFA一样 装满了可以直…

ls命令的参数选项

ls命令的参数的作用 可以指定要查看的文件夹&#xff08;目录&#xff09;的内容&#xff0c;如果不指定参数&#xff0c;就查看当前工作目录的内容。ls 命令的选项 常用语法&#xff1a;ls [-a -l -h] [linux路径] -a 选项表示 all &#xff0c;即列出全部内容&#xff0c;包括…

JAVA学习-练习试用Java实现“不同的子序列”

问题&#xff1a; 给定一个字符串 s 和一个字符串 t &#xff0c;计算在 s 的子序列中 t 出现的个数。 字符串的一个 子序列 是指&#xff0c;通过删除一些&#xff08;也可以不删除&#xff09;字符且不干扰剩余字符相对位置所组成的新字符串。&#xff08;例如&#xff0c;&…

Linux下find命令使用介绍

Linux下的find命令是一个功能强大的文件搜索工具&#xff0c;它能够遍历指定目录层次结构&#xff0c;根据一系列预设条件来查找并操作文件和目录。find命令的灵活性在于它支持多种查找条件和操作&#xff0c;使得用户能够非常精确地定位文件系统中的内容。下面是find命令的一些…

北航数据结构与程序设计图部分选填题

一、 抓两个关键信息&#xff1a;无向图&#xff0c;邻接表。无向图中&#xff0c;边&#xff08;vi&#xff0c;vj&#xff09;要在vi的链表中记录一次&#xff0c;再以&#xff08;vj&#xff0c;vi&#xff09;的形式在vj的链表中记录一次。 每个边都要记录两次&#xff0c…

文心一言 VS 讯飞星火 VS chatgpt (285)-- 算法导论21.2 4题

四、请给出图 21-3 所示操作序列的一个运行时间的渐近紧确界&#xff0c;假定使用链表表示和加权合并启发式策略。如果要写代码&#xff0c;请用go语言。 文心一言&#xff1a; 图 21-3 没有直接给出&#xff0c;但通常这种操作序列可能与某种数据结构&#xff08;如并查集或…

Flink On Yarn实操演示

这课的学习我们基本上了解了flink on line的一些基本原理&#xff0c;以及相应的一些集群的一些参数配置。通过本节课的学习&#xff0c;我们将去通过一些实际的一些操作&#xff0c;然后来去看flink on your的一个集群的具体的一个部署的一个流程。我们接下来看一下这个flink …

Seal^_^【送书活动第7期】——《IT项目经理进阶之道》

Seal^_^【送书活动第7期】——《IT项目经理进阶之道》 一、参与方式二、本期推荐图书2.1 作者荐语2.2 编辑推荐2.3 图书简介2.4 前言2.5 目 录 三、正版购买 从领导、客户、下属、供应商四个角度&#xff0c;介绍IT项目经理在实际工作中需要面对的挑战&#xff0c;以及一些常见…

【C++】哈希的概念及STL中有关哈希容器的使用

目录 前言一、unordered系列关联式容器1.1 标准库中的unordered_set1.1.1 unordered_set的介绍1.1.2 unordered_set的常用接口说明1.1.2.1 unordered_set对象的常见构造1.1.2.1.1 [无参构造函数](https://legacy.cplusplus.com/reference/unordered_map/unordered_map/)1.1.2.1…

置信度是什么

置信度&#xff08;Confidence&#xff09;在统计学和机器学习中是一个重要的概念&#xff0c;反映了一个估计值或预测结果的可靠性和准确性。置信度通常通过置信区间或置信水平来表示。 置信区间 置信区间&#xff08;Confidence Interval&#xff09;是一个范围&#xff0c…

laravel中如何向字段标签添加工具提示

首先&#xff0c;您可以使用 轻松自定义字段标签->label()。我相信您知道这一点。但您知道吗……标签输出未转义&#xff1f;这意味着您也可以在标签中包含 HTML。 为了尽快实现上述目标&#xff0c;我只是采取了一个快速而粗糙的解决方案&#xff1a; CRUD::field(nickna…

速盾:阿里云ddos黑洞是怎么回事?

阿里云ddos黑洞是一种防御分布式拒绝服务&#xff08;DDoS&#xff09;攻击的安全机制。DDoS攻击是指利用大量的合法请求占用目标服务器的资源&#xff0c;从而使服务器无法正常响应合法用户的请求。为了应对这种攻击&#xff0c;阿里云引入了黑洞机制。 黑洞机制是一种主动防…

常用快捷键-快速开发-mac idea 查看侧边栏tool window project+新建文件快捷键

背景&#xff1a;来到公司后&#xff0c;换了mac系统&#xff0c;有点不习惯&#xff0c;于是自己重新设置了开发的快捷键 1、mac idea 查看侧边侧栏&#xff08;专业说法是Tool Window Project&#xff09;&#xff1a; 每次我们都要点击一下左上角的这个类似于文件夹的图标…

竞赛选题 python 机器视觉 车牌识别 - opencv 深度学习 机器学习

1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于python 机器视觉 的车牌识别系统 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;3分创新点&#xff1a;3分 &#x1f9ff; 更多资…

代码走查的一个实例

1996年6月23日至7月1日&#xff0c;我被点名到四川某单位协助排查某系统的技术问题。 我不懂该系统的原理&#xff0c;也不懂硬件&#xff0c;只能从软件角度分析问题。 那时&#xff0c;我所在单位已经为一家美国公司做了3年的软件第三方独立验证和测试&#xff0c;从中学到…

人工智能的未来和挑战

人工智能将继续以其强大的变革力量推动科学研究、医疗保健、经济活动和社会治理的深刻变革。 一方面&#xff0c;我们期待AI在药物研发、精准医疗、气候预测、新材料探索等领域带来更多的颠覆性创新&#xff0c;进一步缩短科研周期、提升医疗服务质量&#xff0c;以及优化全球…