LeetCode_416. Partition Equal Subset Sum

題目描述:
在這裏插入圖片描述
思路1:動態規劃

class Solution {
public:
    bool canPartition(vector<int>& nums) {
        int sum=accumulate(nums.begin(),nums.end(),0);
        if(sum&1)//奇數
            return false;
        int n=nums.size();
        int target=sum>>1;
        vector<vector<bool>> dp(n,vector<bool>(target+1));
        if(nums[0]<=target){
            dp[0][nums[0]]=true;
        }     
        for(int i=1;i<n;i++){
            for(int j=0;j<=target;j++){
                dp[i][j]=dp[i-1][j];
                if(nums[i]==j){
                    dp[i][j]=true;
                    continue;
                }
                if(nums[i]<j){
                    dp[i][j]=dp[i-1][j]||dp[i-1][j-nums[i]];
                }
            }
        }
        return dp[n-1][target];
    }
};
class Solution {
public:
    bool canPartition(vector<int>& nums) {
        int sum=accumulate(nums.begin(),nums.end(),0);//accumulate(start,end,init)
        if(sum&1==1)
            return false;
        vector<int> dp(sum+1);
        dp[0]=1;
        for(int num:nums){
            for(int i=sum>>1;i>=0;i--){
                if(dp[i])
                    dp[i+num]=1;
            }
            if(dp[sum>>1])
                return true;
        }
        return false;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章