代码随想录算法训练营第四十三天【动态规划part05】 | 1049. 最后一块石头的重量 II、494. 目标和、474.一和零

news/2024/11/29 10:44:01/

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

题目链接:

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

求解思路:

等于把石头尽量分成重量相同的两堆

动规五部曲

  1. 确定dp数组及其下标含义:容量为j的背包,最多能装下的最大重量为dp[j]
  2. 确定递推公式:dp[j] = max(dp[j], dp[j - stones[i]] + stones[i]);
  3. dp数组的初始化:重量不会是负数,全部初始化为0即可
  4. 确定遍历顺序:先物品,再背包,且遍历背包要倒序
  5. 举例推导dp数组:以[2,4,1,1]为例,如图。最后相撞后的结果为sum-2*dp[target]

代码:

class Solution {
public:int lastStoneWeightII(vector<int>& stones) {int sum = 0;for (int i : stones) sum += i;int target = sum / 2;vector<int> dp(target+1, 0);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. 目标和

题目链接:

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

求解思路:

等于求有多少种不同的组合方式,能组合成和为left的子集(装满这个背包有几种方法)

动规五部曲

  1. dp数组及其下标含义:填满j(包括j)这么大容积的包,有dp[j]种方法
  2. 确定递推公式:dp[j] += dp[j - nums[i]],举例说明如下,凑整dp[5]的方法就是把所有的dp[j - nums[i]]累加
    • 已经有一个1(nums[i]) 的话,有 dp[4]种方法 凑成 容量为5的背包。
    • 已经有一个2(nums[i]) 的话,有 dp[3]种方法 凑成 容量为5的背包。
    • 已经有一个3(nums[i]) 的话,有 dp[2]中方法 凑成 容量为5的背包
    • 已经有一个4(nums[i]) 的话,有 dp[1]中方法 凑成 容量为5的背包
    • 已经有一个5 (nums[i])的话,有 dp[0]中方法 凑成 容量为5的背包
  3. 初始化:dp[0] = 1,dp[0]是递推结果的起源
  4. 遍历顺序:先物品,再背包,背包要倒序
  5. 举例推导dp数组:nums: [1, 1, 1, 1, 1],target = 3,此时bagSize = 4,如图

代码:

class Solution {
public:int findTargetSumWays(vector<int>& nums, int target) {int sum = 0;for (int i : nums) sum += i;// 两种特殊情况if (abs(target) > sum) return 0;if ((target + sum) % 2 == 1) return 0;int bagSize = (target + sum) / 2;// 填满j(包括j)这么大容积的包,有dp[j]种方法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];}
};

474.一和零

题目链接:

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

求解思路:

动规五部曲

  1. 确定dp数组及其下标含义:最多有i个0和j个1的strs的最大子集的大小为dp[i][j]
  2. 递推公式:dp[i][j] 可以由前一个strs里的字符串推导出来,strs里的字符串有zeroNum个0,oneNum个1,则 dp[i][j] = dp[i - zeroNum][j - oneNum] + 1,注意和dp[i][j]本身比较,取较大的值;字符串的zeroNum和oneNum相当于物品的重量(weight[i]),字符串本身的个数相当于物品的价值(value[i]),即01背包问题,不过重量有两个维度
  3. 初始化:物品价值不会为负数,因此全部初始化为0
  4. 遍历顺序:先物品,后背包,背包倒序;注意物品是strs里的字符串,背包是题目中的m和n
  5. 举例推导:以 ["10","0001","111001","1","0"],m = 3,n = 3为例,如图

代码:

class Solution {
public:int findMaxForm(vector<string>& strs, int m, int n) {// 初始化vector<vector<int>> dp(m+1, vector<int> (n+1, 0));for (string str : strs){ // 遍历物品int one = 0, zero = 0;for (char c : str){if (c == '0') zero ++;else one++;}// 遍历背包(倒序遍历)for (int i = m; i >= zero; i--){for (int j = n; j >= one; j--){dp[i][j] = max(dp[i][j], dp[i-zero][j-one] + 1);}}}return dp[m][n];}
};


http://www.ppmy.cn/news/1249222.html

相关文章

基于springboot实现班级综合测评管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现班级综合测评管理系统演示 摘要 随着互联网技术的高速发展&#xff0c;人们生活的各方面都受到互联网技术的影响。现在人们可以通过互联网技术就能实现不出家门就可以通过网络进行系统管理&#xff0c;交易等&#xff0c;而且过程简单、快捷。同样的&#x…

快速操控鼠标行为!Vue鼠标按键修饰符让你事半功倍

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! ⭐ 专栏简介 欢迎来到前端入门之旅&#xff01;这个…

【SparkSQL】基础入门(重点:SparkSQL和Hive的异同、SparkSQL数据抽象)

【大家好&#xff0c;我是爱干饭的猿&#xff0c;本文重点介绍Spark SQL的定义、特点、发展历史、与hive的区别、数据抽象、SparkSession对象。 后续会继续分享其他重要知识点总结&#xff0c;如果喜欢这篇文章&#xff0c;点个赞&#x1f44d;&#xff0c;关注一下吧】 上一…

GEE 23:基于GEE实现物种分布模型之随机森林法

基于GEE实现物种分布模型之随机森林法 1.物种分布数据2.研究区绘制3.预测因子选择 1.物种分布数据 根据研究目的和需要导入物种数据&#xff1a; // Load presence data var Data ee.FeatureCollection("users/************736/Distribution"); print(Original da…

在虚拟机搭建nignx,和使用本地访问nginx的情况

下载nginx yum install nginx 查看nginx是否安装成功。 nginx -v nginx的配置文件的目录和资源的目录。 先到nginx.conf的目录下&#xff0c;在 /etc/nginx/nginx.conf&#xff0c;编辑它。 vi /etc/nginx/nginx.conf 可以看到默认的html的目录。在 /usr/share/nginx/html 下面…

PTApt——2023年软件设计综合实践_7(数据结构)

6-1 递增的整数序列链表的插入 本题要求实现一个函数&#xff0c;在递增的整数序列链表&#xff08;带头结点&#xff09;中插入一个新整数&#xff0c;并保持该序列的有序性。 答案&#xff1a; 语言选C(gcc) List Insert(List L, ElementType X) {List tmp (List) mal…

[个人笔记] VMware vCenter的CLI笔录

VMware虚拟化 - CLI笔录 VMware vCenter的CLI笔录 VMware虚拟化 - CLI笔录VMware vCenter的CLI笔录vCenter 6.7 Shell service-control服务管理的CLIvCenter 6.7 上传文件到ShellvCenter 6.7 Shell iptables防火墙管理vCenter 6.7 Shell 替换计算机SSL证书全流程other cli VMwa…

竞赛选题 题目:基于机器视觉的图像矫正 (以车牌识别为例) - 图像畸变校正

文章目录 0 简介1 思路简介1.1 车牌定位1.2 畸变校正 2 代码实现2.1 车牌定位2.1.1 通过颜色特征选定可疑区域2.1.2 寻找车牌外围轮廓2.1.3 车牌区域定位 2.2 畸变校正2.2.1 畸变后车牌顶点定位2.2.2 校正 7 最后 0 简介 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享…