day43 动态规划part5 代码随想录算法训练营 1049. 最后一块石头的重量 II

题目:1049. 最后一块石头的重量 II

我的感悟:

  • 复习了昨天的模板是不一样,今天这个我推出来了。
  • 哈哈
  •  

理解难点:

  • 按照昨天的思路,dp[target] 里面是能凑出来的最大值。
  • a 是另外能凑出来的和。
  • diff是两者的差。

听课笔记:

dp[j] = max( dp[j], dp[j-weight[i]] + value[i] ) # 这个是基础

代码里最后可以优化为diff = sum(stones) - dp[target] - dp[target]

我自己先写出的代码:

class Solution:
    def lastStoneWeightII(self, stones: List[int]) -> int:
        target = sum(stones) // 2
        dp = [0] * (target+1)
        
        for i in range(len(stones)):
            for j in range(target,stones[i]-1,-1):
                dp[j] = max(dp[j],dp[j-stones[i]]+stones[i])
        a = sum(stones) - dp[target]
        diff = a - dp[target]
        return diff

通过截图:

扩展写法:

资料:

本题就和 昨天的 416. 分割等和子集 很像了,可以尝试先自己思考做一做。 

视频讲解:https://www.bilibili.com/video/BV14M411C7oV

https://programmercarl.com/1049.%E6%9C%80%E5%90%8E%E4%B8%80%E5%9D%97%E7%9F%B3%E5%A4%B4%E7%9A%84%E9%87%8D%E9%87%8FII.html

posted @ 2024-02-27 19:41  o蹲蹲o  阅读(3)  评论(0编辑  收藏  举报