代码随想录算法训练营第四十一天| 动态规划

Posted by Zhuoqun on February 23, 2023

416. 分割等和子集

01背包问题的二维数组版弄懂了,一维数组的还是不清楚为什么要倒叙。

class Solution {
public:
    bool canPartition(vector<int>& nums) {
        if(nums.size() == 1){
            return false;
        }
        bool result = false;
        int dp_size = nums.size();
        int sum = 0;
        for(auto i:nums){
            sum = sum + i;
        }
        if(sum%2 == 1){
            return false;
        }
        int target = sum/2;
        
        vector<int> dp(10001, 0);

        for(int i=0; i<dp_size; i++){
            for(int j=target; j >= nums[i]; j--){
                dp[j] = max(dp[j],dp[j-nums[i]]+nums[i]);
                if(dp[j] == target){
                    return true;
                }
            }
        }
        
        return false;

    }
};