代码随想录算法训练营第43天 | 动态规划 背包理论基础 LeetCode1049.最后一块石头的重量II,494.目标和,474.一和零

news2024/11/25 14:27:21

@代码随想录算法训练营第43天 | 动态规划 背包理论基础 LeetCode1049.最后一块石头的重量II,494.目标和,474.一和零

1049.最后一块石头的重量II

第一遍读题思考

重点在于背包问题的理论基础建议阅读以下两个链接。
背包问题理论基础,用二维数组入门
背包问题理论基础,用一维数组优化

代码随想录解法思路

如何分析题目构建成01背包问题?这道题本质上还是把所有的石头分成等重的两堆,所以也就是现在有一个总重为sum/2的背包,问最多能装多少,最后sum-2*dp[target]就好了。

c++代码具体实现注意事项

class Solution {
public:
    int lastStoneWeightII(vector<int>& stones) {
        int sum = accumulate(stones.begin(), stones.end(), 0);
        vector<int> dp(sum/2+1, 0);
        int target=sum/2;
        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-2*dp[target];
    }
};

494.目标和

第一遍读题思考

重点在于背包问题的理论基础建议阅读以下两个链接。
背包问题理论基础,用二维数组入门
背包问题理论基础,用一维数组优化

代码随想录解法思路

在这里插入图片描述
在这里插入图片描述
主要需要注意上面这两个关键思路,一个是怎么构建的背包问题(通过把问题分解为正数和负数,只需要在背包里统计能放多少种整数就可以了。)再有就是这里的dp
数组记录的是放的正数的和为j的时候有多少种。

c++代码具体实现注意事项

class Solution {
public:
    int findTargetSumWays(vector<int>& nums, int target) {
        int sum = accumulate(nums.begin(), nums.end(), 0);
        if((sum+target)%2==1) return 0;
        if(abs(target)>sum) return 0;
        vector<int> dp((sum+target)/2+1, 0);
        dp[0]=1;
        for(int i=0;i<nums.size();i++)
            for(int j=(sum+target)/2;j>=nums[i];j--){
                dp[j] += dp[j-nums[i]];
            }
        return dp[(sum+target)/2];
    }
};

474.一和零

第一遍读题思考

重点在于背包问题的理论基础建议阅读以下两个链接。
背包问题理论基础,用二维数组入门
背包问题理论基础,用一维数组优化

代码随想录解法思路

仍然是01背包问题,只不过进化成了二维数组。

c++代码具体实现注意事项

class Solution {
public:
    int findMaxForm(vector<string>& strs, int m, int n) {
        vector<vector<int>> dp(m+1, vector<int>(n+1,0));
        for(int id=0;id<strs.size();id++){
            int zeroNum{0};
            int oneNum{0};
            for(auto c:strs[id]){
                if(c=='0') zeroNum++;
                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];

    }
};

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

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

相关文章

sed命令基础

sed编辑器即流编辑器&#xff08;stream editor&#xff09;&#xff0c;根据命令处理数据流中的数据&#xff0c;这些命令可从命令行输入&#xff0c;或者指定文件中输入。 sed执行的操作如下&#xff1a; 1&#xff09;从输入读取一行数据 2&#xff09;根据提供的命令匹配数…

KSS-ICP: 基于形状分析技术的点云配准方法

目录 1. 概述 2. 算法实现 3. 实验结果 总结 Reference 三维点云配准是三维视觉领域一个经典问题&#xff0c;涉及三维重建&#xff0c;定位&#xff0c;SLAM等具体应用问题。传统的配准可以被分为两条技术路线&#xff0c;即基于全局姿态匹配的方法以及基于特征点对应的方法。…

疫情下社区管理系统的设计与实现(论文+源码)_kaic

疫情下社区管理系统 摘 要&#xff1a;新冠疫情下的社区人员管理系统是基于SpringBoot搭建的一套前后端分离系统。面向疫情下的社区管理人员和社区用户&#xff0c;主要用于进行社区服务&#xff0c;进行高效的社区人员管理。具有一定的经济效益和社会效益。本文分析了新冠疫情…

计算机网络第三章(数据链路层)【湖科大教书匠】

1. 概述 物理层发出去的信号需要通过数据链路层才知道是否到达目的地&#xff1b;才知道比特流的分界线 链路(Link)&#xff1a;从一个结点到相邻结点的一段物理线路&#xff0c;中间没有任何其他交换结点数据链路(Data Link)&#xff1a;把实现通信协议的硬件和软件加到链路…

【ROS实操2话题订阅输出乌龟位姿】

需求描述 已知turtlesim中的乌龟显示节点&#xff0c;会发布当前乌龟的位姿(窗体中乌龟的坐标以及朝向)&#xff0c;要求控制乌龟运动&#xff0c;并时时打印当前乌龟的位姿。 实现分析 1.首先&#xff0c;需要启动乌龟显示以及运动控制节点并控制乌龟运动。 2.要通过ROS命令…

网络原理TCP协议

hi,我们又见面了,今天为大家带来TCP协议,一共为大家介绍TCP协议的十个核心特性 1.确认应答 2.超时重传 3连接管理 4滑动窗口 5流量控制 6拥塞控制 7延迟应答 8捎带应答 9面向字节流(粘包问题) 10异常情况(心跳包) 11基于TCP应用层协议 TCP协议位于传输层,我们知道T…

微信小程序开发 | API应用案例(上)

API应用案例&#xff08;上&#xff09;5.1【案例1】用户登录5.1.1 案例分析5.1.2 前导知识5.1.3 搭建开发者服务器5.1.4 实现用户登录5.1.5 检查用户是否已经登录5.1.6 获取用户信息5.1.7 开放数据校验与解密5.2【案例2】个人中心5.2.1 案例分析5.2.2 前导知识5.2.3 实现底部标…

BE-SSL:基于边界增强自监督学习的脑结构分割

文章目录Boundary-Enhanced Self-supervised Learning for Brain Structure Segmentation摘要本文方法Supervoxel BranchRegistration BranchAtlas Selection实验结果Boundary-Enhanced Self-supervised Learning for Brain Structure Segmentation 摘要 边界增强自监督学习(…

用Pytorch搭建一个房价预测模型

本文参加新星计划人工智能(Pytorch)赛道&#xff1a;https://bbs.csdn.net/topics/613989052 目录 一、项目介绍 二、准备工作 三、实验过程 3.1数据预处理 3.2拆分数据集 3.3构建PyTorch模型 3.3.1.数据转换 3.3.2定义模型架构 3.3.3定义损失准则和优化器 3.3.4创建…

Linux查看端口

目录 1.查看已知端口的使用情况 2.查看所有端口的占用情况 3.查看占用端口的程序的进程号 4.杀死进程号 1.查看已知端口的使用情况 #例:8080 可使用命令: netstat -anp | grep 8080 结果如下: 还可以使用这条命令: netstat -tln | grep 8080 结果如下: 区别:第一条命令后面显示…

评分卡模型(二)基于评分卡模型的用户付费预测

评分卡模型&#xff08;二&#xff09;基于评分卡模型的用户付费预测 小P&#xff1a;小H&#xff0c;这个评分卡是个好东西啊&#xff0c;那我这想要预测付费用户&#xff0c;能用它吗 小H&#xff1a;尽管用&#xff5e; &#xff08;本想继续薅流失预测的&#xff0c;但想了…

DevExpress WinForms电子表格控件,更快拥有现代办公体验!(二)

DevExpress WinForm Spreadsheet组件能读写XLSx、XLS、CSV、TXT文件、打印并导出为PDF等&#xff0c;为终端用户提供了当今流行的办公UI体验&#xff01;在上文中&#xff08;点击这里回顾>>&#xff09;&#xff0c;我们介绍了DevExpress WinForm中Excel启发式的电子表格…

【计算机网络-数据链路层】集线器、网桥、交换机

本文许多文字和图片使用了湖科大教书匠&#xff08;高军老师&#xff09;的 PPT&#xff0c;在此表示感谢。正是他让非科班的我能以奇妙的方式走进网络的世界。 文章目录1 【物理层】集线器&#xff08;Hub&#xff09;——共享式以太网1.1 为什么使用集线器&#xff1f;1.2 集…

救命,我好像发现了测试工程师面试通关秘籍

一、自我介绍 &#xff08;自我介绍不局限于下面模板&#xff0c;灵活表达&#xff09; 面试官你好&#xff0c;我叫xxx&#xff0c;今年xx岁&#xff0c;家乡是xx省xx市。20xx年毕业后一直从事软件测试工作&#xff0c;到现在已经x年了。 目前为止&#xff0c;经历过x家公司…

基于SpringBoot的大学生体质测试管理系统源码数据库论文

目录 目录 1 绪 论 1.1系统背景介绍 1.2课题研究的目的和意义 1.3系统的研究现状 1.4系统实现的功能 1.5系统的特点 2 开发工具和技术 2.1 B/S体系结构 2.2 Java语言简介 2.3 SpringBoot框架 2.4 MySQL简介 3 系统需求分析 3.1 系统可行性分析及目的…

JS数组reduce()方法详解及高级技巧

reduce()方法可以搞定的东西&#xff0c;for循环&#xff0c;或者forEach方法有时候也可以搞定&#xff0c;那为啥要用reduce()&#xff1f;这个问题&#xff0c;之前我也想过&#xff0c;要说原因还真找不到&#xff0c;唯一能找到的是&#xff1a;通往成功的道路有很多&#…

QtableWidget插入数据卡顿优化方法

最近要使用Qtablewidget保存4300多的数据&#xff0c;发现以下刷新4300条数据&#xff0c;界面会变得非常卡顿&#xff0c;于是想了优化一下&#xff1b;因为要对所有数据排序&#xff0c;想用一下Qtablewidget自动排序功能&#xff0c;而且数据量不多&#xff0c;不想采用动态…

【教学类-32-02】十二生肖2.0版(绘画+手工+排序+左右分类+玩牌)(中班:偏科学-数)

作品展示 2.0样式——动物头部方向随机向左、或者向右 背景需求 1.0样式——动物头部方向全部向右&#xff0c; 我希望孩子分类的时候还能够“判断生肖头部的方向做一个左右分类” 素材准备&#xff1a; 1、图片准备 office PPT2013里面有一个图标的功能&#xff0c;内置大量…

java继承类怎么写

继承类是通过把父类的方法和属性继承到一个类中&#xff0c;而子类的方法和属性是子类自己定义的。 Java中有一个很重要的概念叫做继承&#xff0c;这也是 Java语言的精髓所在。Java语言提供了一种机制&#xff0c;叫做派生类。在 Java中&#xff0c;如果没有实现了某个派生类方…

终端和文件运行python代码

如何创建python文件&#xff1f;新建一个txt&#xff0c;然后修改后缀名为 .py&#xff0c; 然后修改打开方式为记事本&#xff0c;写入一行代码&#xff0c;然后关闭 接下来如何运行呢&#xff1f;让他输出这一段代码 winR cmd 回车 &#xff0c;然后输入python 文件地址 我…