第四十三天 | 416.分割等和子集 1049.最后一块石头的重量|| 494.目标和

题目:416.分割等和子集

思路:只要找到集合里能够出现sum/2的子集总和,就算是可以分割成两个相同元素和子集了。

1.dp[j]含义:背包容量为j时,放进物品后,背的最大重量为dp[j]

那么如果背包容量为target, dp[target]就是装满 背包之后的重量,所以 当 dp[target] == target 的时候,背包就装满了。

2.递推公式:dp[j] = max(dp[j], dp[j - nums[j]] + nums[j])

本题,相当于背包里放入数值,那么物品i的重量是nums[i],其价值也是nums[i]。

3.初始化:如果题目给的价值都是正整数那么非0下标都初始化为0就可以了,如果题目给的价值有负数,那么非0下标就要初始化为负无穷。

4.遍历顺序:先物品后背包;背包从后到前(若从前到后则每个物品会放入多次)

5.举例推到dp数组:dp[target]里存的是最大重量

代码如下:

class Solution {
public:bool canPartition(vector<int>& nums) {int sum = 0;//dp[i]中的i表示背包内的总和//题目中说:每个数组中的元素不会超过 100,数组大小不会超过 200//总和不会大于20000,背包最大只需要其中的一半,所以10001大小就可以了vector<int> dp(10001, 0);for(int i = 0; i < nums.size(); i++) {sum += nums[i];}//库函数一步求和:int sum = accumulate(nums.begin(), nums.end(), 0);if(sum % 2 == 1) return false;int target = sum / 2;//开始01背包for(int i = 0; i < nums.size(); i++){for(int j = target; j >= nums[i]; j--) {   //每一个元素一定是不可重复放入,所以大小从大到小遍历//j代表背包容量,当j>nums[i]时,j - nums[i]才会大于0,背包里才能放下它dp[j] = max(dp[j], dp[j - nums[i]] + nums[i]);      //每次都做选择,求每次的最优解}}//集合中的元素正好可以凑成总和targetif(dp[target] == target) return true;return false;}
};

题目:1049.最后一块石头的重量||

思路:将石头尽可能的分为重量总和近似相等的两堆,是两堆相撞,得到相撞所剩下的最小值

1.dp[j]含义:背包容量为j时,最大价值为dp[j]。每个石头的重量即为每个石头的价值(这一点要注意)。

        如何定义dp数组大小?极端情况下所有石头一共中3000,因为本题将石头尽可能的分为重量总和近似相等的两堆,所以背包容量1500就够了

2.递推公式:dp[j] = max(dp[j], dp[j - stones[i]] + stones[i]);

3.初始化:0

4.遍历顺序

5.打印dp数组

代码如下:

class Solution {
public:int lastStoneWeightII(vector<int>& stones) {int sum = 0;for(int i = 0; i < stones.size(); i++){sum += stones[i];}vector<int> dp(1501, 0);int target = sum / 2;      //target只会向下取整//开始遍历01背包for(int i = 0; i < stones.size(); i++){for(int j = target; j >= stones[i]; j--){dp[j] = max(dp[j], dp[j - stones[i]] + stones[i]);}}return sum - dp[target] - dp[target];}
};

题目:494.目标和(可以尝试一下回溯实现,不过会超时)

class Solution {
public:int findTargetSumWays(vector<int>& nums, int target) {int sum = 0;for(int i = 0; i < nums.size(); i++){sum += nums[i];}if(abs(target) > sum) return 0;    //此时没有方案if((target + sum) % 2 == 1) return 0;    //通过解方程可以得到此关系int bagSize = (target + sum) / 2;vector<int> dp(bagSize + 1, 0);dp[0] = 1;      //初始化要注意for(int i = 0;  i < nums.size(); i++){for(int j = bagSize; j >= nums[i]; j--){dp[j] += dp[j - nums[i]];}}return dp[bagSize];}
};

总结一下:

纯背包:装满这个背包的最大价值

分割等和子集:能不能装满这个背包?

最后一块石头的重量:给出背包最大重量,问最大能装多少

目标和:给一个背包,问有多少种方式能装满

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

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

相关文章

分类网络中one-hot的作用

在分类任务中&#xff0c;使用神经网络时&#xff0c;通常需要将类别标签转换为一种合适的输入格式。这时候&#xff0c;one-hot编码&#xff08;one-hot encoding&#xff09;是一种常见且有效的方法。one-hot编码将类别标签表示为向量形式&#xff0c;其中只有一个元素为1&am…

2024年顶级算法-黑翅鸢优化算法(BKA)-详细原理(附matlab代码)

黑翅鸢是一种上半身蓝灰色&#xff0c;下半身白色的小型鸟类。它们的显著特征包括迁徙和捕食行为。它们以小型哺乳动物、爬行动物、鸟类和昆虫为食&#xff0c;具有很强的悬停能力&#xff0c;能够取得非凡的狩猎成功。受其狩猎技能和迁徙习惯的启发&#xff0c;该算法作者建立…

PS —— 精修图像

PS —— 精修图像 修复污点修复画笔工具修复画笔工具 美白滤镜去杂锐化加杂减淡和锐化工具 我觉得今天这篇博客&#xff0c;无论是男同胞还是女同胞&#xff0c;都要熟练掌握&#xff08;哈哈哈哈…) 今天我们来学习如何精修图像&#xff0c;精修图像一般分为几步——修复&…

面试准备【面试准备】

面试准备【面试准备】 前言面试准备自我介绍&#xff1a;项目介绍&#xff1a; 论坛项目功能总结数据库表设计注册功能登录功能显示登录信息功能发布帖子评论私信点赞功能关注功能通知搜索网站数据统计热帖排行缓存 论坛项目技术总结Http的无状态cookie和session的区别为什么要…

1、什么是模块化,为什么要模块化?2、衡量模块独立的定性标准是什么?用自己的话表达其含义3、如何理解信息隐藏和局部化?用自己的话或者例子表达其含义

1. 模块化是指将一个大型系统划分为多个相互独立、功能单一的模块或组件的过程。模块化的目的是为了提高系统的可维护性、可扩展性和可重用性。通过模块化&#xff0c;系统的各个功能模块可以独立开发、测试和维护&#xff0c;降低了系统的复杂度&#xff0c;提高了开发效率和代…

shell文本三剑客——awk命令【☆】

目录 一、akw原理 二、命令格式 三、常用变量 四、awk的用法 1.输出整行内容 2.按字段输出文本内容 3.按列输出文件内容 FS变量为列分隔符 4.awk的三个模式 5. awk ‘控制语句条件 {操作}’ 文件 6.awk的数组 7.awk的应用 一、akw原理 逐行读取文本&#xff0c;默认…

const的了解

const详解_解const-CSDN博客 本文内容学习自上面的文章&#xff0c;ta写的非常好&#xff0c;非常感谢&#xff01;&#xff01;&#xff01; 1.const成员函数&#xff1a;该函数不可以修改该对象的任何成员变量 class T { public:int i;int j; public:void fun() const; //…

AI爆文写作:标题需要什么?情绪炸裂,态度要激烈,行为要夸张!

现在这个传播环境下&#xff0c;在公域中&#xff0c;轻声细语&#xff0c;慢慢的说&#xff0c;无法吸引到注意&#xff0c;没有人搭理。 标题要需要情绪张扬&#xff0c;态度激烈&#xff0c;行为夸张&#xff0c;大声喧闹。 唐韧的用户群是互联网产品经理&#xff0c;阅读量…

基于GA遗传优化的CNN-GRU的时间序列回归预测matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 CNN-GRU模型架构 4.2 GA优化CNN-GRU流程 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022a 3.部分核心程序 ...........................................…

45岁前TVB有型熟男生图流出

凭无线处境剧《爱回家》中饰演律师「严谨」一角成功入屋的张达伦&#xff0c;于2022年约满无线离巢后&#xff0c;正式「卖身」给杜琪峰成为旗下艺人&#xff0c;先后亮相ViuTV剧集及综艺节目&#xff0c;又参与电影演出&#xff0c;作多方面尝试和发展。 日前有网民食完糖水在…

【Muduo】接收新连接的Acceptor类

在 Muduo 的设计中&#xff0c;Acceptor类扮演着接受客户端连接请求的关键角色&#xff0c;其运行在每一个TcpServer实例中。一个服务器通常只创建一个监听socket描述字&#xff0c;故其在TcpServer中只有一个&#xff0c;用来监听服务器的唯一socket。它也会将传来的mainLoop和…

spring boot集成Knife4j

文章目录 一、Knife4j是什么&#xff1f;二、使用步骤1.引入依赖2.新增相关的配置类3.添加配置信息4.新建测试类5. 启动项目 三、其他版本集成时常见异常1. Failed to start bean ‘documentationPluginsBootstrapper2.访问地址后报404 一、Knife4j是什么&#xff1f; 前言&…

Todesk无法登录,提示服务器断开连接。(已解决)

坐标福建&#xff0c;近一两个月todesk手机端均无法登录&#xff0c;尝试卸载重装&#xff0c;更新等&#xff0c;均无效。也没搜索到有效的解决方案&#xff0c;今天去看了商店的低星评论&#xff0c;发现是针对福建地区的服务器“维护”&#xff0c;考虑到近期复杂的国际形势…

大语言模型实战——最小化agent

1. agent是什么 大模型拥有语言理解和推理能力后&#xff0c;就相当于拥有了大脑&#xff0c;要让模型发挥更大的潜力&#xff0c;就需要给它安装上手臂&#xff0c;让它拥有行动的能力。 而Agent就是一个将语言模型和外部工具结合起来的智能体&#xff0c;它使用语言模型的推…

“从根到叶:使用决策树导航数据”

目录 一、说明 二、什么是决策树&#xff1f; 三、基本概念&#xff1a; 四、工作原理&#xff1a; 五、分类原理分析 5.1 信息熵&#xff1a; 5.2 信息增益&#xff1a; 5.3 基尼杂质&#xff1a; 5.4 基尼系数和熵的区别&#xff1a; 六、对于回归决策树&#xff1a; 6.1 均方…

解决el-image只能点击关闭按钮才能关闭的问题

问题&#xff1a;el-image打开大图预览时&#xff0c;只能点击关闭按钮才能关闭&#xff0c;点击蒙层不能关闭的 methods: {handleClickStop() {this.$nextTick(() > {const domImageView document.querySelector(".el-image-viewer__mask") // 获取遮罩层domif …

DOM【事件、操作节点、DOM案例】--学习JavaEE的day49

day49 JS核心技术 DOM 继day48 事件 键盘事件 监听器&#xff1a;onkeydown、onkeypress、onkeyup <!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title></head><body><input type"text&q…

考研英语二小作文专项练习题目和简单示例

目录 一、考研英语小作文介绍 二、往年真题练习 题目一(给俱乐部写封电子邮件) 三、作者复习经验

前端请求超时截断,axios timeout设置未生效情况记录

问题描述 前端请求超时截断&#xff0c;axios timeout设置未生效情况记录 timeout设置方式&#xff1a; 表现&#xff08;前端超过5min报错500&#xff0c;直接访问接口超过5min能够正常响应&#xff09;&#xff1a; 问题原因 上面的配置设置时间为1000min&#xff0c;明显…