题目:
有一堆石头,每块石头的重量都是正整数。
每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下:
如果 x == y,那么两块石头都会被完全粉碎;
如果 x != y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。
最后,最多只会剩下一块石头。返回此石头最小的可能重量。如果没有石头剩下,就返回 0。

class Solution {
// dp[j] 表示容量为 j 的背包,所装物品的最大价值为 dp[j]
// 物品是个数为 stones.size(), stones数组中的每个元素既是物品重量,又是物品价值
// 理解一下,最后return时 为什么取这个dp[target],此时的 dp[target]public:int lastStoneWeightII(vector<int>& stones) {int sum = 0;for(int i = 0; i < stones.size(); i++){sum += stones[i];}// 自动向下取整,即为背包的最大容量int target = sum / 2;// dp 数组也可以定义为: dp(15001,0)vector<int> dp(target + 1, 0);bool flag = false;for(int i = 0; i < stones.size(); i++)  // 先遍历物品{   for(int j = target; j >= stones[i]; j--)    // 再遍历背包容量,从后向前{dp[j] = max(dp[j], stones[i] + dp[j - stones[i]]);cout << dp[j] << " ";if(dp[j] == target)     flag = true;}cout << endl;// 加上这个判断,可以提前结束if(flag == true)    break;}// 注意这里减的是 dp[target],而不是 target,刚开始就写错了。return sum - 2 * dp[target];}
};

leetcode——第1049题——最后一块石头的重量相关推荐

  1. Leetcode 1049:最后一块石头的重量 II(超详细的解法!!!)

    有一堆石头,每块石头的重量都是正整数. 每一回合,从中选出任意两块石头,然后将它们一起粉碎.假设石头的重量分别为 x 和 y,且 x <= y.那么粉碎的可能结果如下: 如果 x == y,那么 ...

  2. LeetCode(1046)——最后一块石头的重量(JavaScript)

    有一堆石头,每块石头的重量都是正整数. 每一回合,从中选出两块最重的石头,然后将它们一起粉碎.假设石头的重量分别为 x 和 y,且 x <= y.那么粉碎的可能结果如下: 如果 x == y,那 ...

  3. leetcode算法题--最后一块石头的重量 II★

    原题链接:https://leetcode-cn.com/problems/last-stone-weight-ii/ 这个题目可以转化成0-1背包问题,非常巧妙.把问题看成有两堆石头,求如何将使两堆 ...

  4. LeetCode刷题day43|1049. 最后一块石头的重量 II、 494. 目标和、474.一和零

    文章目录 一.1049. 最后一块石头的重量 II 二.494. 目标和 三.474.一和零 一.1049. 最后一块石头的重量 II 这道题其实就与"分割子集"一样,就是先将总和 ...

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

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

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

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

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

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

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

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

  9. LeetCode 1049. 最后一块石头的重量 II(DP)

    1. 题目 有一堆石头,每块石头的重量都是正整数. 每一回合,从中选出任意两块石头,然后将它们一起粉碎. 假设石头的重量分别为 x 和 y,且 x <= y.那么粉碎的可能结果如下: 如果 x ...

最新文章

  1. OPENWRT中SSH免密钥登陆(具体步骤)
  2. 微信小程序之页面打开数量限制
  3. sketch制作Android动画,如何直接用Sketch制作动画|Sketch插件|
  4. 多媒体计算机在英语学科的应用,多媒体计算机应用于初中英语学科学习教学的研究...
  5. 如何在ASP.NET Core程序启动时运行异步任务(2)
  6. 对照片进行边缘化处理,并将边缘化处理后的结果保存
  7. SpringBoot中各配置文件的优先级及加载顺序
  8. javascript 开发_25个新JavaScript开发人员的免费资源
  9. 硬盘显示容量和实际容量不符合_买移动固态硬盘纠结大半天?花2分钟看完这篇,购买时不再被坑...
  10. java 海量文件存储_【直通BAT】海量数据面试总结
  11. C51单片机学习思维导图
  12. pytorch 数据类型
  13. 我的第一个全栈 Web 应用程序
  14. VC6-VC2008转移到VC2015问题记录
  15. 求购TMC差旅管理系统(含源代码),价格商议
  16. MacOS Mojave 更换开机登录界面壁纸
  17. 数据交换平台-初步设计
  18. 【完结】囚生CYの备忘录(20221121-20230123)
  19. 脑动力PHP函数速查效率手册pdf
  20. 标准化存贷款数据报送系统

热门文章

  1. linux64和x86,Linux x86和x64的区别
  2. 个人整理的学习信息安全相关的网站、软件
  3. “玩伴女郎”误入学术圈--lena图象的使用数字图像历史上最重要的事件之一
  4. java Date 日期格式化
  5. 数据库索引原理 b树
  6. python 绘制花瓣_怎么用python画花朵
  7. 如何给电脑桌面添加便签,电脑便签适合日常办公
  8. 计算机机器人兴趣小组活动总结,机器人兴趣小组活动总结-20210417041309.docx-原创力文档...
  9. go语言连接Mysql数据库
  10. DP接口显示器,在win10中,桌面图标重排,窗口都缩到左上角