今天是第37天刷leetcode,立个flag,打卡60天。
算法挑战链接
1049. 最后一块石头的重量 IIhttps://leetcode.cn/problems/last-stone-weight-ii/
第一想法
题目理解:每次选出两块石头相抵消,求最后剩下石头的重量。
看到这个题目,脑海中第一想到的是0-1背包问题。他其实求的是将石头分成两份,求两份的差值最小。
因此直接套用0-1背包的公式上去看看先。将石头看成是物品,石头的重量就是物品的重量,石头的重量也是物品的价值。
动态规划的五部曲走起:
- 确定dp数组(dp table)以及下标的含义
dp[j] 代表的含义是:在 0-i 物品任取的情况下,容量为 J 的最大价值
- 确定递推公式
递推公式就直接写了,因为是0-1背包的公式 dp[j] = max(dp[j], dp[j-i] + nums[i])
- dp的初始化
需要将dp数组全部初始化为0
- 确定遍历顺序
先遍历物品,然后在遍历容量,遍历容量的时候需要从大到小开始遍历,因为有每个物品只能使用一次的限制。
- 举例推导dp数组
数据就不推导了。
今日收获
总结还是很有必要的,省事