栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

力扣-416题 分割等和子集(C++)- 0-1背包

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

力扣-416题 分割等和子集(C++)- 0-1背包

题目链接:https://leetcode.cn/problems/partition-equal-subset-sum/
题目如下:

class Solution {
public:
    bool canPartition(vector& nums) {
        int n=nums.size();//背包问题中物品的数量
        int sum=0;
        for(auto e:nums){
            sum+=e;
        }
        if(sum%2!=0) return false;
        sum/=2;//背包问题中背包的总容量

        //0-1背包问题:即每次只做一个决策,判断一个物品是否放入背包
        vector> dp(n,vector(sum+1,false));
        dp[0][0]=true;
        if(nums[0]<=sum) dp[0][nums[0]]=true;//在对第1次物品作决策时,分为放或者不放,上一行为不放入背包,这一行为放入

        for(int i=1;i//从第二件物品开始依次判断作决策
            for(int j=0;j<=sum;j++){
                if(j-nums[i]>=0){//当前背包的重量减去当前物品的重量可以判断出是否要将该物品放入背包
                    dp[i][j] = dp[i-1][j] || dp[i-1][j-nums[i]];//当前状态为上一个状态放或不放的组合
                }else{
                    dp[i][j]=dp[i-1][j];//当前物品不放入背包
                }
            }
        }

        return dp[n-1][sum];//表示在对所有n件物品决策完后,背包重量为sum时的判断
    }
};
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/928268.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号