代码随想录算法训练营之JAVA|第三十七天|1049. 最后一块石头的重量 II

今天是第37天刷leetcode,立个flag,打卡60天。

算法挑战链接

1049. 最后一块石头的重量 IIicon-default.png?t=N6B9https://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数组

数据就不推导了。

今日收获

总结还是很有必要的,省事

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值