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

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

时间:2024-02-27 19:46:17浏览次数:27  
标签:stones target E5% 1049 随想录 II diff day43 dp

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

我的感悟:

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

理解难点:

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

听课笔记:

我自己先写出的代码:

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

标签:stones,target,E5%,1049,随想录,II,diff,day43,dp
From: https://www.cnblogs.com/liqi175/p/18037695

相关文章

  • 代码随想录算法训练营第三十天|回溯法总结
    回溯法总结回溯算法能解决如下问题:组合问题:N个数里面按一定规则找出k个数的集合排列问题:N个数按一定规则全排列,有几种排列方式切割问题:一个字符串按一定规则有几种切割方式子集问题:一个N个数的集合里有多少符合条件的子集棋盘问题:N皇后,解数独等等代码随想录(programmerc......
  • 代码随想录 day63 下一个更大元素II 接雨水
    下一个更大元素II更下一个最大元素是一样的思路需要处理的是成环数组的模拟过程可以把两个一样的目标数组拼接在一起这样就相当于它成环了或者i变成两倍的范围然后目标下标就变成i%length这样i就会落回目标数组的下标也就是成环了接雨水实际上双指针法可能更......
  • 代码随想录 第六天 哈希表理论基础 ● 242.有效的字母异位词 ● 349. 两个数组的交
    LeetCode:242.有效的字母异位词-力扣(LeetCode)思路:既然只判断两个字符串的字母,就一个++,一个--,最后如果二十六个字母都是零,说明两个字符串相等。反思: //charat(i)是返回字符串索引,所以s.charAt(i)-'a'实际上是获取字符串s中第i个字符相对于字母'a'的偏移量。......
  • 代码随想录算法训练营第二十九天| 491.递增子序列 46.全排列 47.全排列 II
    491.递增子序列题目链接:491.非递减子序列-力扣(LeetCode)思路:一开始一直报访问异常的错误,最后只好参考官网答案,结果竟然是因为我递归参数写错了导致程序一直出问题???(⊙︿⊙)这里去重用的是标记数组,可以用集合unordered_set,但由于本题数据范围比较小,所以我们可以用数组更加高效的......
  • day42 动态规划part4 代码随想录算法训练营 416. 分割等和子集
    题目:416.分割等和子集我的感悟:有点难,更快的解法用了01True和False所以更快理解难点:转化为背包问题听课笔记:代码示例:我优化了下classSolution:defcanPartition(self,nums:List[int])->bool:ifsum(nums)%2==1:returnFalse......
  • 代码随想录 | 24. 两两交换链表中的节点 19.删除链表的倒数第N个节点 面试题 02.0
    LeetCode:24.两两交换链表中的节点-力扣(LeetCode)思路:第一步:两两交换要考虑循环什么时候退出,当cur指针.next是null是就到尾部了,同理,链表不是奇数就是偶数,cur.next.next是空也是。第二步循环条件判断完了接下来要实现交换,如图所示,按步骤来就好,提前将1,2,3存好,接下来按图......
  • day42 动态规划part4 代码随想录算法训练营 46. 携带研究材料- 一维数组写法
    题目:46.携带研究材料我的感悟:一维是二维的压缩理解难点:倒序遍历j因为每轮的数字是由左上决定的。遍历的时候,从右侧遍历,是不会影响左侧的。听课笔记:代码示例:defbag_problem(weight,value,bagWeight):#初始化dp=[0]*(bagWeight+1)fori......
  • day42 动态规划part4 代码随想录算法训练营 卡尔网46. 携带研究材料
    题目:卡尔网-46.携带研究材料我的感悟:有1个测试用例没通过。还要多练习理解难点:dp递推公式的由来,初始化的参数。听课笔记:代码示例:defbag_problem(weight,value,bagweight):#[1,3,4][15,20,30]4ifbagweight==1:index=weigh......
  • 卡码java基础课 | 3.A+B问题III
    学习内容:if语句关系运算符逻辑运算符break语句continue语句重点归纳:break和continue的用法和区别break:跳出循环continue:直接从头开始执行循环内结构,跳过continue后剩余的代码例题:解:点击查看代码importjava.util.Scanner;publicclassMain{publicstaticv......
  • 代码随想录 day61 每日温度 下一个更大元素 I
    每日温度单调栈的作用就是记录之前的元素好与当前元素比较从栈顶到栈底单调增找第一个第一个大元素单调减找第一个小元素栈内存的是数组下标而不是数组元素因为存元素还要会数组找元素是谁存下标可以直接用栈元素作为索引找数组元素下一个更大元素I跟每日温度......