这个题和之前的 (M)Dynamic Programming:Target Sum 很像。当时那个题就不明白。这次这个题包含了另一个问题,数组中是否有一个子数组,这个子数组的和等于目标值target
class Solution {
public:
bool canPartition(vector<int>& nums) {
int all = accumulate(nums.begin(), nums.end(), 0);
if(all % 2 != 0) return false;
return canPartition(nums, all/2);
}
bool canPartition(vector<int>& nums, int all)
{
vector<int> dp(all+1, 0);
dp[0] = 1;
for(int i = 0; i < nums.size(); ++i)
{
for(int j = all; j >= nums[i]; --j)
{
dp[j] = dp[j] || dp[j - nums[i]];
}
}
return dp[all];
}
};