首页 > 编程语言 >代码随想录算法训练营-动态规划-3-(0-1背包问题)|416. 分割等和子集、1049. 最后一块石头的重量 II

代码随想录算法训练营-动态规划-3-(0-1背包问题)|416. 分割等和子集、1049. 最后一块石头的重量 II

时间:2023-10-15 11:35:10浏览次数:42  
标签:背包 target nums sum 随想录 II 416 num dp

416. 分割等和子集

  01背包的递推公式为:dp[j] = max(dp[j], dp[j - weight[i]] + value[i]);

  如果dp[j] == j 说明,集合中的子集总和正好可以凑成总和j,理解这一点很重要。

 1 class Solution:
 2     def canPartition(self, nums: List[int]) -> bool:
 3         _sum = 0
 4 
 5         # dp[i]中的i表示背包内总和
 6         # 题目中说:每个数组中的元素不会超过 100,数组的大小不会超过 200
 7         # 总和不会大于20000,背包最大只需要其中一半,所以10001大小就可以了
 8         dp = [0] * 10001
 9         for num in nums:
10             _sum += num
11         # 也可以使用内置函数一步求和
12         # _sum = sum(nums)
13         if _sum % 2 == 1:
14             return False
15         target = _sum // 2
16 
17         # 开始 0-1背包
18         for num in nums:
19             for j in range(target, num - 1, -1):  # 每一个元素一定是不可重复放入,所以从大到小遍历
20                 dp[j] = max(dp[j], dp[j - num] + num)
21 
22         # 集合中的元素正好可以凑成总和target
23         if dp[target] == target:
24             return True
25         return False

 

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

  本题其实就是尽量让石头分成重量相同的两堆,相撞之后剩下的石头最小,这样就化解成01背包问题了。

  

标签:背包,target,nums,sum,随想录,II,416,num,dp
From: https://www.cnblogs.com/wuyijia/p/17765401.html

相关文章

  • 力扣---137. 只出现一次的数字 II
    给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次。请你找出并返回那个只出现了一次的元素。你必须设计并实现线性时间复杂度的算法且使用常数级空间来解决此问题。 示例1:输入:nums=[2,2,3,2]输出:3示例2:输入:nums=[0,1,0,1,0,1,99]......
  • 2023-2024-1 20231416 《计算机基础与程序设计》第三周学习总结
    计算机科学概论第二章学习了二进制、八进制、十进制、十六进制的计算和转化,二进制与八进制采用“三合一”转化,即三位二进制数按权展开为一位八进制数,二进制与十六进制数采用“四合一”转化法,即四位二进制数按权展开得到一位十六进制数。例如:二进制→八进制010=0+12^1+0=2二进制......
  • 2023-2024-1 20231416 《计算机基础与程序设计》第三周学习总结
    计算机概论第二章中书里主要讲述了二进制八进制以及十六进制的运算以及十进制如何转化为不同的进制学习二进制计算是学习计算机程序的重中之重在经过不懈学习后掌握了二进制的我对于学习计算机更有了一份自信第三章中学习了补码反码等概念以及关键字编码行程长度编码......
  • 观察者模式II
    需求以支付状态更新通知为例,当支付状态更新时,通知邮件服务和库存服务。自定义观察者模式packagecom.fh.observer;importorg.junit.Test;importjava.util.List;importjava.util.Vector;/***推送模式*/publicclassObserverTest6{/***观察者......
  • 手把手教你分析IIS日志——IP访问次数,URI访问统计等
    配置IIS网站的日志下载日志分析工具https://gitee.com/tangdd369098655/open-network-disk解压打开选择文件指定分析规则(还可以自己写规则哦~~)运行规则进行分析今天就写到这里啦~小伙伴们,( ̄ω ̄( ̄ω ̄〃( ̄ω ̄〃)ゝ我们明天再见啦~~大家要天天开心哦欢迎大家指出文章需......
  • CF1416E Split
    暴力dp是很拉跨的,我们会设\(dp_{i,j}\)表示前\(i\)个\(a_i\)分裂后,最后一个\(b\)为\(j\)时的最小答案,爆炸。但这里面有很多性质啊,直观地我们可以感受到,若已经确定了决策\(dp_{i-1,k}\),那么无论如何选择\(a_i\)的分裂方式,对答案带来的贡献都会在\(0\sim2\)之间,......
  • .NET5_IIS安装与运行发布
    一、IIS安装1、打开控制面板、点击程序 2、点击启动或关闭Windows功能4、勾选InternetInformationServices下所有的选项全部划勾5、确定二、IIS运行与发布.netcore发布到IIS上出现HTTP错误500.19,错误代码:0x8007000d错误提示: 错误原因是缺少了模块,原因有两种:1......
  • IIS应用程序池配置详解及优化
    参数说明1.常规属性名称属性详解NETCLR版本配置应用程序池,以加载特定版本的.NETCLR。选定的CLR版本应与应用程序所使用的相应版本的.NETFramework对应。选择“无托管代码”将导致所有的ASP.NET请求失败。队列长度HTTP.sys将针对应用程序池排队的最大......
  • 代码随想录第二天|977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II
    977有序数组的平方题目链接:https://leetcode.cn/problems/squares-of-a-sorted-array/思路:双指针(实际是三指针),两个找最大值,一个确定平方后的位置。209.长度最小的子数组题目链接:https://leetcode.cn/problems/minimum-size-subarray-sum/思路:很像双指针,一个指向子数组开头,一......
  • 代码随想录训练营的第二天(Python)| 977.有序数组的平方、209.长度最小的子数组
    977.有序数组的平方暴力求解(O(n+logn))classSolution:defsortedSquares(self,nums:List[int])->List[int]:returnsorted(i**2foriinnums)双指针(O(n))由于列表是单调递增的,元素平方后的最大值要么在最前面,要么在最后面classSolution:defsort......