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+targetB = (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.一和零 】相关推荐

  1. day43|● 1049. 最后一块石头的重量 II ● 494. 目标和 ● 474.一和零

    1049. 最后一块石头的重量 II 1.代码 class Solution { public:int lastStoneWeightII(vector<int>& stones) ...

  2. LeetCode:1049.最后一块石头的重量II 494.目标和 474.一和零

    1049.最后一块石头的重量II 题目 有一堆石头,用整数数组 stones 表示.其中 stones[i] 表示第 i 块石头的重量. 每一回合,从中选出任意两块石头,然后将它们一起粉碎.假设石头的 ...

  3. 代码随想录刷题|LeetCode 1049. 最后一块石头的重量II 494. 目标和 474.一和零

    目录 1049. 最后一块石头的重量 II 思路 最后一块石头的重量|| 494. 目标和 思路 0.求什么 1.确定dp数组的含义 2.递推公式 3.初始化dp数组 4.遍历顺序 目标和 474.一 ...

  4. Day36||1049. 最后一块石头的重量 II ● 494. 目标和 ● 474.一和零

    1049. 最后一块石头的重量 这道题很像分割加和相等的子集的问题,把石头分成尽可能相同的两堆. class Solution { public:int lastStoneWeightII(vecto ...

  5. 代码随想录算法训练营day42 |动态规划之背包问题 11.分割等和子集 1049. 最后一块石头的重量 II 494. 目标和

    day42 11.分割等和子集 1.dp数组的含义 2.确定递推公式 3.dp数组初始化 4.确定遍历顺序 5.打印dp数组 1049. 最后一块石头的重量 II 1.确定dp数组以及下标的含义 2. ...

  6. 【5.31 代随_43day】 最后一块石头的重量 II、目标和、一和零

    最后一块石头的重量 II.目标和.一和零 最后一块石头的重量 II 1.方法 图解步骤![在这里插入图片描述](https://img-blog.csdnimg.cn/d2266317bc43491f ...

  7. LeetCode-动态规划背包题-1049. 最后一块石头的重量 II

    描述 1049. 最后一块石头的重量 II 有一堆石头,用整数数组 stones 表示.其中 stones[i] 表示第 i 块石头的重量. 每一回合,从中选出任意两块石头,然后将它们一起粉碎.假设石 ...

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

    1049. 最后一块石头的重量 II 无论按照何种顺序粉碎石头,最后一块石头的重量总是可以表示成 可以这样理解,将所有的石头分为两堆,ki=1的石头是一堆,ki=-1的石头是另一堆,我们的目标就是求上 ...

  9. 153、【动态规划】leetcode ——1049. 最后一块石头的重量 II:滚动数组(C++版本)

    题目描述 原题链接:1049. 最后一块石头的重量 II 解题思路 本题要找的是最小重量,我们可以将石头划分成两个集合,当两个集合的重量越接近时,相减后,可达到的装量就会是最小,此时本题的思路其实就类 ...

最新文章

  1. 2004-10-26+ 用户输入的安全问题
  2. [转] linux下查看nginx,apache,mysql,php的编译参数
  3. Python 爬起数据时 'gbk' codec can't encode character '\xa0' 的问题
  4. linux iptables 端口 防火墙 规则
  5. 信号分析中一些特征量
  6. 后端技术:SpringBoot 中实现跨域的5种方式
  7. c语言函数实际参数,C语言:函数声明与定义的参数不一致问题,后果可能很严重哦!!!!!...
  8. windows下编写dll
  9. Danfo.js专题 - Danfo.js与Dnotebook简介与入门
  10. 第四十四篇 面向对象高阶
  11. python 日历+记事
  12. python爬取12306_爬虫12306返回数据怎么解析
  13. MATLAB音乐十二平均律频谱分析与STM32电子琴(含源码)
  14. FPGA学习之Cyclone器件资源结构知识介绍
  15. 计算机硬件主流参数,小白秒成DIY大神 自学电脑硬件参数速成攻略
  16. python中count方法
  17. Java分割字符串(spilt())
  18. 数据中心的端口密度该如何增加?
  19. Docker+Jenkins+Seneca构建去集中化微服务架构
  20. java前端桌面设计javafx布局思路

热门文章

  1. 汽车座椅位置自动调节中高灵敏度数字式锁存
  2. 第 8 章 函数探幽
  3. Activity启动流程(基于Android26),Android开发必须要会
  4. Java数据结构 双向链表
  5. STM32开发——看门狗
  6. FAT32文件系统下文件恢复
  7. 详解LocalTime
  8. JS 中的 import 与 export
  9. 初级程序员面试不靠谱指南(一)
  10. 如何评估并管理供应商绩效