【43天|1049. 最后一块石头的重量 II ● 494. 目标和 ● 474.一和零 】
1049. 最后一块石头的重量 II
dp[j] 表示j容量的背包可以背下石头的最大重量。
class Solution {public:int lastStoneWeightII(vector<int>& stones) {int sum =0;for(int & num: stones){sum+= num;}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-dp[target]*2;}
};
494. 目标和
设给负号的数和为A, 正号的数和为B。 那么如下等式成立:
A+B = sum(nums的总和);
B-A = target;
两式相加 得,2B = sum+target
;B = (sum+target)/2
;
所以问题变成, 如何用nums中的元素凑成 B。
动态规划0-1背包的问题:
dp[j] 表示凑成j
的方法。递推公式:dp[j] += dp[j-nums[i]]
class Solution {public:int findTargetSumWays(vector<int>& nums, int target) {int sum =0;for(int & n:nums){sum+=n;}if(abs(sum)<abs(target)) return 0;// 总和不可能比目标数小if( (sum+target)%2!=0) return 0; //2B不可能为奇数。所以这种情况是不可能有结果的int s = (sum+target)/2;vector<int> dp(s+1, 0);dp[0] = 1;for(int i=0; i<nums.size(); i++){for(int j=s; j>=nums[i]; j--){dp[j] += dp[j-nums[i]];//不用nums[i]凑到j的方法+用nums[i]凑到j的方法}}return dp[s];}
};
474.一和零
一个二维的0-1背包问题
class Solution {public:int findMaxForm(vector<string>& strs, int m, int n) {vector<vector<int>> dp(m+1,vector(n+1, 0));for( string & str: strs){int zero = 0;int one = 0;for(char & ch:str){if(ch=='0') zero++;else one++;}for(int i = m; i>=zero; i--){for(int j=n; j>=one; j--){dp[i][j] = max(dp[i-zero][j-one]+1, dp[i][j]);}}}return dp[m][n];}
};
【43天|1049. 最后一块石头的重量 II ● 494. 目标和 ● 474.一和零 】相关推荐
- day43|● 1049. 最后一块石头的重量 II ● 494. 目标和 ● 474.一和零
1049. 最后一块石头的重量 II 1.代码 class Solution { public:int lastStoneWeightII(vector<int>& stones) ...
- LeetCode:1049.最后一块石头的重量II 494.目标和 474.一和零
1049.最后一块石头的重量II 题目 有一堆石头,用整数数组 stones 表示.其中 stones[i] 表示第 i 块石头的重量. 每一回合,从中选出任意两块石头,然后将它们一起粉碎.假设石头的 ...
- 代码随想录刷题|LeetCode 1049. 最后一块石头的重量II 494. 目标和 474.一和零
目录 1049. 最后一块石头的重量 II 思路 最后一块石头的重量|| 494. 目标和 思路 0.求什么 1.确定dp数组的含义 2.递推公式 3.初始化dp数组 4.遍历顺序 目标和 474.一 ...
- Day36||1049. 最后一块石头的重量 II ● 494. 目标和 ● 474.一和零
1049. 最后一块石头的重量 这道题很像分割加和相等的子集的问题,把石头分成尽可能相同的两堆. class Solution { public:int lastStoneWeightII(vecto ...
- 代码随想录算法训练营day42 |动态规划之背包问题 11.分割等和子集 1049. 最后一块石头的重量 II 494. 目标和
day42 11.分割等和子集 1.dp数组的含义 2.确定递推公式 3.dp数组初始化 4.确定遍历顺序 5.打印dp数组 1049. 最后一块石头的重量 II 1.确定dp数组以及下标的含义 2. ...
- 【5.31 代随_43day】 最后一块石头的重量 II、目标和、一和零
最后一块石头的重量 II.目标和.一和零 最后一块石头的重量 II 1.方法 图解步骤![在这里插入图片描述](https://img-blog.csdnimg.cn/d2266317bc43491f ...
- LeetCode-动态规划背包题-1049. 最后一块石头的重量 II
描述 1049. 最后一块石头的重量 II 有一堆石头,用整数数组 stones 表示.其中 stones[i] 表示第 i 块石头的重量. 每一回合,从中选出任意两块石头,然后将它们一起粉碎.假设石 ...
- LeetCode 1049. 最后一块石头的重量 II
1049. 最后一块石头的重量 II 无论按照何种顺序粉碎石头,最后一块石头的重量总是可以表示成 可以这样理解,将所有的石头分为两堆,ki=1的石头是一堆,ki=-1的石头是另一堆,我们的目标就是求上 ...
- 153、【动态规划】leetcode ——1049. 最后一块石头的重量 II:滚动数组(C++版本)
题目描述 原题链接:1049. 最后一块石头的重量 II 解题思路 本题要找的是最小重量,我们可以将石头划分成两个集合,当两个集合的重量越接近时,相减后,可达到的装量就会是最小,此时本题的思路其实就类 ...
最新文章
- 2004-10-26+ 用户输入的安全问题
- [转] linux下查看nginx,apache,mysql,php的编译参数
- Python 爬起数据时 'gbk' codec can't encode character '\xa0' 的问题
- linux iptables 端口 防火墙 规则
- 信号分析中一些特征量
- 后端技术:SpringBoot 中实现跨域的5种方式
- c语言函数实际参数,C语言:函数声明与定义的参数不一致问题,后果可能很严重哦!!!!!...
- windows下编写dll
- Danfo.js专题 - Danfo.js与Dnotebook简介与入门
- 第四十四篇 面向对象高阶
- python 日历+记事
- python爬取12306_爬虫12306返回数据怎么解析
- MATLAB音乐十二平均律频谱分析与STM32电子琴(含源码)
- FPGA学习之Cyclone器件资源结构知识介绍
- 计算机硬件主流参数,小白秒成DIY大神 自学电脑硬件参数速成攻略
- python中count方法
- Java分割字符串(spilt())
- 数据中心的端口密度该如何增加?
- Docker+Jenkins+Seneca构建去集中化微服务架构
- java前端桌面设计javafx布局思路