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. 分割等和子集 很像了,可以尝试先自己思考做一做。