leetcode 416 分割等和子串

leetcode 416 分割等和子串,第1张

class Solution {
public:
    bool canPartition(vector& nums) {
        //因为题目要求时分割成两个子集,并且两个子集的和相等
        int sum=0;
        vectordp(10001,0);//dp[i]表示容量为i,最大可以凑成i的子集之和为dp[i]
        for(int i=0;i< nums.size(); i++){
            sum+=nums[i];           //计算总和
        }
        if(sum % 2 == 1)return false;//无解
        int targer = sum / 2;           //如果背包可以凑成的子集之和等于数组元素之和的一半说明有解
        //开始01背包
        for(int i=0;i < nums.size(); i++){
            for(int j= targer;j >= nums[i]; j--){//确保每一个元素不可重复
                dp[j]=max(dp[j],dp[j-nums[i]]+nums[i]);//取与不取
            }
        }
        if(dp[targer]==targer)return true;
        return false;
    }
};

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/915305.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-16
下一篇2022-05-16

发表评论

登录后才能评论

评论列表(0条)

    保存