首页 > 其他分享 >代码随想录 -- 动态规划 -- 分割等和子集

代码随想录 -- 动态规划 -- 分割等和子集

时间:2024-11-08 15:18:46浏览次数:3  
标签:return target nums -- 随想录 range 子集 False dp

416. 分割等和子集 - 力扣(LeetCode)

思路:

题目中表述:将数组nums分割成两个子集,使得两个子集的元素和相等。

可以转化为:有一个背包,如果存在部分元素组合可以令容量为nums的和的一半的背包容纳的最大价值也为nums的和的一半,那么剩下的元素和也是nums的一半,则符合题意。

  • dp[j]含义:容量为j的背包,能容纳的最大价值。
  • 递推公式:dp[j]=max(dp[j],dp[j-nums[i]]+nums[i])
  • 初始化:都初始化为0
  • 遍历顺序:先遍历物品,再遍历背包,从后向前遍历背包,好像遍历物品的顺序不重要?
class Solution(object):
    def canPartition(self, nums):
        if sum(nums)%2!=0:return False
        target=sum(nums)/2
        dp=[0]*(target+1)
        for i in range(len(nums)-1,-1,-1):
            for j in range(target,-1,-1):
                if j-nums[i]>=0:
                    dp[j]=max(dp[j],dp[j-nums[i]]+nums[i])
        if dp[target]==target:return True
        else:return False
class Solution(object):
    def canPartition(self, nums):
        if sum(nums)%2!=0:return False
        target=sum(nums)/2
        dp=[0]*(target+1)
        for i in range(len(nums)):
            for j in range(target,-1,-1):
                if j-nums[i]>=0:
                    dp[j]=max(dp[j],dp[j-nums[i]]+nums[i])
        if dp[target]==target:return True
        else:return False

题解:对背包的遍历从target到nums[i]-1.

class Solution(object):
    def canPartition(self, nums):
        if sum(nums)%2!=0:return False
        target=sum(nums)/2
        dp=[0]*(target+1)
        for i in range(len(nums)):
            for j in range(target,nums[i]-1,-1):
                if j-nums[i]>=0:
                    dp[j]=max(dp[j],dp[j-nums[i]]+nums[i])
        if dp[target]==target:return True
        else:return False

标签:return,target,nums,--,随想录,range,子集,False,dp
From: https://blog.csdn.net/weixin_56989647/article/details/143448175

相关文章

  • 群控系统服务端开发模式-应用开发-基础框架开发补充
    一、总控制补充    在根目录下app文件夹下controller文件夹中修改Base总控制文件。需要添加操作者权限验证、获取操作者权限、设置操作者权限。    1、权限验证//验证权限protectedfunctioncheckRoleMenu($auth){if(empty($this->rules......
  • 算法定制LiteAIServer烟火识别软件烟火检测算法有哪些优势呢?
    在现代社会,随着人工智能技术的飞速发展,各种智能监控系统在公共安全、工业生产、环境保护等领域得到了广泛应用。其中,烟火检测作为预防火灾的重要手段,其准确性和实时性对于减少火灾损失、保障人民生命财产安全具有重要意义。摄像机实时接入分析平台LiteAIServer作为一款基于人工......
  • 在复杂环境中,算法定制LiteAIServer视频智能分析平台如何提高对比度识别的准确率?
    随着科技的飞速发展,视频监控已经成为各行各业不可或缺的一部分。然而,视频质量的好坏直接影响到监控效果,其中对比度作为衡量图像质量的重要指标之一,对于视频内容的清晰度和细节表现至关重要。为了提高对比度误报识别的准确率,算法定制LiteAIServer视频智能分析平台凭借其先进的图......
  • 摄像机视频分析软件下载LiteAIServer入侵检测算法平台部署智能化安防
    在当今社会,安全问题已成为各行各业不可忽视的重要议题。特别是在需要高度监控的场合,如工厂、仓库、城市重要区域等,有效防范未经授权的行人入侵成为了亟待解决的问题。视频智能分析平台部署LiteAIServer行人入侵检测算法应运而生,以其卓越的技术实力和广泛的应用价值,为这一领域带......
  • CPU算法分析LiteAIServer视频智能分析平台视频智能分析:抖动、过亮与过暗检测技术
    随着科技的飞速发展,视频监控系统在各个领域的应用日益广泛。然而,视频质量的好坏直接影响到监控系统的效能,尤其是在复杂多变的光照条件下和高速数据传输中,视频画面常常出现抖动、过亮或过暗等问题,导致监控视频难以提供有效的信息。为了解决这些挑战,视频智能分析平台LiteAIServer......
  • 数据分析-44-时间序列预测之深度学习方法TCN
    文章目录1TCN简介1.1网络示意图1.2TCN优点2模拟应用2.1模拟数据2.2预处理创建滞后特征2.3划分训练集和测试集2.4创建TCN模型2.5模型训练2.6模型预测3自定义my_TCN模型3.1my_TCN()函数3.2训练模型3.3模型预测3.4改进4参考附......
  • Day14买卖股票的最佳时机
    给定一个数组prices,它的第i个元素prices[i]表示一支给定股票第i天的价格。你只能选择某一天买入这只股票,并选择在未来的某一个不同的日子卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润......
  • 期末考试---设计原则
    1.里氏替换原则(LSP)里氏替换原则(LiskovSubstitutionPrinciple,LSP)是面向对象设计中的一项重要原则,该原则的核心思想是:如果对每一个父类对象(基类),都存在一个子类对象(派生类)能够替代它,并且程序的行为没有变化,那么这个子类就是对父类的一个正确的替代。里氏替换原则的要点......
  • Chromium 进程降权和提权模拟示例c++
     一、背景知识概念参考微软链接:强制完整性控制-Win32应用程序|Microsoft学习授权)(模拟级别-Win32apps|MicrosoftLearnDuplicateTokenEx函数(securitybaseapi.h)-Win32apps|MicrosoftLearn本文主要演示 low,medium,high,andsystem四种权限创建......
  • Android Audio中 AudioTrack、 AudioFlinger和 HAL 使用dump的区别
    Audiodump在定位音频的各种问题非常重要,我们主要在AudioTrack、AudioFlinger和HAL层中会用到,这里我们先明确一下在不同层使用dump的区别。以下是关于AudioTrack、AudioFlinger和HAL(HardwareAbstractionLayer,硬件抽象层)中dump的区别和使用场景:一、区别Audi......