题目:分割等和子集

 1bool canPartition(vector<int>& nums)
 2{
 3    int sum = reduce(nums.begin(), nums.end());
 4    if(sum % 2 != 0) return false;
 5    sum /= 2;
 6
 7    int n = nums.size();
 8    std::vector<bool> dp(sum + 1, false);
 9    dp[0] = true;
10    for(int num : nums)
11    {
12        for(int i = sum; num <= i; i--)
13        {
14            if(dp[i - num]) dp[i] = true;
15        }
16        if(dp[sum]) return true;
17    }
18    return dp[sum];
19}