mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2026-02-02 18:39:09 +08:00
Merge branch 'master' of https://github.com/kok-s0s/leetcode-master
This commit is contained in:
@@ -9,7 +9,7 @@
|
||||
|
||||
## 1049. 最后一块石头的重量 II
|
||||
|
||||
题目链接:https://leetcode-cn.com/problems/last-stone-weight-ii/
|
||||
[力扣题目链接](https://leetcode-cn.com/problems/last-stone-weight-ii/)
|
||||
|
||||
题目难度:中等
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
组合 7 和 8,得到 1,所以数组转化为 [2,1,1,1],
|
||||
组合 2 和 1,得到 1,所以数组转化为 [1,1,1],
|
||||
组合 1 和 1,得到 0,所以数组转化为 [1],这就是最优值。
|
||||
|
||||
|
||||
提示:
|
||||
|
||||
* 1 <= stones.length <= 30
|
||||
@@ -39,12 +39,12 @@
|
||||
|
||||
如果对背包问题不都熟悉先看这两篇:
|
||||
|
||||
* [动态规划:关于01背包问题,你该了解这些!](https://mp.weixin.qq.com/s/FwIiPPmR18_AJO5eiidT6w)
|
||||
* [动态规划:关于01背包问题,你该了解这些!(滚动数组)](https://mp.weixin.qq.com/s/M4uHxNVKRKm5HPjkNZBnFA)
|
||||
* [动态规划:关于01背包问题,你该了解这些!](https://programmercarl.com/背包理论基础01背包-1.html)
|
||||
* [动态规划:关于01背包问题,你该了解这些!(滚动数组)](https://programmercarl.com/背包理论基础01背包-2.html)
|
||||
|
||||
本题其实就是尽量让石头分成重量相同的两堆,相撞之后剩下的石头最小,**这样就化解成01背包问题了**。
|
||||
|
||||
是不是感觉和昨天讲解的[416. 分割等和子集](https://mp.weixin.qq.com/s/sYw3QtPPQ5HMZCJcT4EaLQ)非常像了。
|
||||
是不是感觉和昨天讲解的[416. 分割等和子集](https://programmercarl.com/0416.分割等和子集.html)非常像了。
|
||||
|
||||
本题物品的重量为store[i],物品的价值也为store[i]。
|
||||
|
||||
@@ -89,11 +89,11 @@ vector<int> dp(15001, 0);
|
||||
4. 确定遍历顺序
|
||||
|
||||
|
||||
在[动态规划:关于01背包问题,你该了解这些!(滚动数组)](https://mp.weixin.qq.com/s/M4uHxNVKRKm5HPjkNZBnFA)中就已经说明:如果使用一维dp数组,物品遍历的for循环放在外层,遍历背包的for循环放在内层,且内层for循环倒叙遍历!
|
||||
在[动态规划:关于01背包问题,你该了解这些!(滚动数组)](https://programmercarl.com/背包理论基础01背包-2.html)中就已经说明:如果使用一维dp数组,物品遍历的for循环放在外层,遍历背包的for循环放在内层,且内层for循环倒叙遍历!
|
||||
|
||||
代码如下:
|
||||
|
||||
```C++
|
||||
```CPP
|
||||
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]);
|
||||
@@ -119,7 +119,7 @@ for (int i = 0; i < stones.size(); i++) { // 遍历物品
|
||||
|
||||
以上分析完毕,C++代码如下:
|
||||
|
||||
```C++
|
||||
```CPP
|
||||
class Solution {
|
||||
public:
|
||||
int lastStoneWeightII(vector<int>& stones) {
|
||||
@@ -143,9 +143,9 @@ public:
|
||||
|
||||
## 总结
|
||||
|
||||
本题其实和[416. 分割等和子集](https://mp.weixin.qq.com/s/sYw3QtPPQ5HMZCJcT4EaLQ)几乎是一样的,只是最后对dp[target]的处理方式不同。
|
||||
本题其实和[416. 分割等和子集](https://programmercarl.com/0416.分割等和子集.html)几乎是一样的,只是最后对dp[target]的处理方式不同。
|
||||
|
||||
[416. 分割等和子集](https://mp.weixin.qq.com/s/sYw3QtPPQ5HMZCJcT4EaLQ)相当于是求背包是否正好装满,而本题是求背包最多能装多少。
|
||||
[416. 分割等和子集](https://programmercarl.com/0416.分割等和子集.html)相当于是求背包是否正好装满,而本题是求背包最多能装多少。
|
||||
|
||||
|
||||
|
||||
@@ -246,4 +246,4 @@ var lastStoneWeightII = function (stones) {
|
||||
* 作者微信:[程序员Carl](https://mp.weixin.qq.com/s/b66DFkOp8OOxdZC_xLZxfw)
|
||||
* B站视频:[代码随想录](https://space.bilibili.com/525438321)
|
||||
* 知识星球:[代码随想录](https://mp.weixin.qq.com/s/QVF6upVMSbgvZy8lHZS3CQ)
|
||||
<div align="center"><img src=../pics/公众号.png width=450 alt=> </img></div>
|
||||
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码.jpg width=450> </img></div>
|
||||
|
||||
Reference in New Issue
Block a user