leetcode——第1049题——最后一块石头的重量
题目:
有一堆石头,每块石头的重量都是正整数。
每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 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题——最后一块石头的重量相关推荐
- Leetcode 1049:最后一块石头的重量 II(超详细的解法!!!)
有一堆石头,每块石头的重量都是正整数. 每一回合,从中选出任意两块石头,然后将它们一起粉碎.假设石头的重量分别为 x 和 y,且 x <= y.那么粉碎的可能结果如下: 如果 x == y,那么 ...
- LeetCode(1046)——最后一块石头的重量(JavaScript)
有一堆石头,每块石头的重量都是正整数. 每一回合,从中选出两块最重的石头,然后将它们一起粉碎.假设石头的重量分别为 x 和 y,且 x <= y.那么粉碎的可能结果如下: 如果 x == y,那 ...
- leetcode算法题--最后一块石头的重量 II★
原题链接:https://leetcode-cn.com/problems/last-stone-weight-ii/ 这个题目可以转化成0-1背包问题,非常巧妙.把问题看成有两堆石头,求如何将使两堆 ...
- LeetCode刷题day43|1049. 最后一块石头的重量 II、 494. 目标和、474.一和零
文章目录 一.1049. 最后一块石头的重量 II 二.494. 目标和 三.474.一和零 一.1049. 最后一块石头的重量 II 这道题其实就与"分割子集"一样,就是先将总和 ...
- 代码随想录刷题|LeetCode 1049. 最后一块石头的重量II 494. 目标和 474.一和零
目录 1049. 最后一块石头的重量 II 思路 最后一块石头的重量|| 494. 目标和 思路 0.求什么 1.确定dp数组的含义 2.递推公式 3.初始化dp数组 4.遍历顺序 目标和 474.一 ...
- 153、【动态规划】leetcode ——1049. 最后一块石头的重量 II:滚动数组(C++版本)
题目描述 原题链接:1049. 最后一块石头的重量 II 解题思路 本题要找的是最小重量,我们可以将石头划分成两个集合,当两个集合的重量越接近时,相减后,可达到的装量就会是最小,此时本题的思路其实就类 ...
- LeetCode-动态规划背包题-1049. 最后一块石头的重量 II
描述 1049. 最后一块石头的重量 II 有一堆石头,用整数数组 stones 表示.其中 stones[i] 表示第 i 块石头的重量. 每一回合,从中选出任意两块石头,然后将它们一起粉碎.假设石 ...
- LeetCode 1049. 最后一块石头的重量 II
1049. 最后一块石头的重量 II 无论按照何种顺序粉碎石头,最后一块石头的重量总是可以表示成 可以这样理解,将所有的石头分为两堆,ki=1的石头是一堆,ki=-1的石头是另一堆,我们的目标就是求上 ...
- LeetCode 1049. 最后一块石头的重量 II(DP)
1. 题目 有一堆石头,每块石头的重量都是正整数. 每一回合,从中选出任意两块石头,然后将它们一起粉碎. 假设石头的重量分别为 x 和 y,且 x <= y.那么粉碎的可能结果如下: 如果 x ...
最新文章
- OPENWRT中SSH免密钥登陆(具体步骤)
- 微信小程序之页面打开数量限制
- sketch制作Android动画,如何直接用Sketch制作动画|Sketch插件|
- 多媒体计算机在英语学科的应用,多媒体计算机应用于初中英语学科学习教学的研究...
- 如何在ASP.NET Core程序启动时运行异步任务(2)
- 对照片进行边缘化处理,并将边缘化处理后的结果保存
- SpringBoot中各配置文件的优先级及加载顺序
- javascript 开发_25个新JavaScript开发人员的免费资源
- 硬盘显示容量和实际容量不符合_买移动固态硬盘纠结大半天?花2分钟看完这篇,购买时不再被坑...
- java 海量文件存储_【直通BAT】海量数据面试总结
- C51单片机学习思维导图
- pytorch 数据类型
- 我的第一个全栈 Web 应用程序
- VC6-VC2008转移到VC2015问题记录
- 求购TMC差旅管理系统(含源代码),价格商议
- MacOS Mojave 更换开机登录界面壁纸
- 数据交换平台-初步设计
- 【完结】囚生CYの备忘录(20221121-20230123)
- 脑动力PHP函数速查效率手册pdf
- 标准化存贷款数据报送系统
热门文章
- linux64和x86,Linux x86和x64的区别
- 个人整理的学习信息安全相关的网站、软件
- “玩伴女郎”误入学术圈--lena图象的使用数字图像历史上最重要的事件之一
- java Date 日期格式化
- 数据库索引原理 b树
- python 绘制花瓣_怎么用python画花朵
- 如何给电脑桌面添加便签,电脑便签适合日常办公
- 计算机机器人兴趣小组活动总结,机器人兴趣小组活动总结-20210417041309.docx-原创力文档...
- go语言连接Mysql数据库
- DP接口显示器,在win10中,桌面图标重排,窗口都缩到左上角