Given a non-empty array containing only positive integers, find if the array can be partitioned into two subsets such that the sum of elements in both subsets is equal.c++
Note:
Each of the array element will not exceed 100.
The array size will not exceed 200.
Example 1:code
Input: [1, 5, 11, 5]element
Output: trueit
Explanation: The array can be partitioned as [1, 5, 5] and [11].
Example 2:io
Input: [1, 2, 3, 5]class
Output: falseco
Explanation: The array cannot be partitioned into equal sum subsets.return
0-1揹包問題。 dp[j] = dp[j] || dp [j - n];揹包問題
class Solution { public: bool canPartition(vector<int>& nums) { int sum = 0; for (int n : nums) sum += n; if (sum % 2 != 0) return false; sum /= 2; return subsetsum(nums, sum); } bool subsetsum(vector<int>& nums, int sum) { int dp[sum + 1] = {false}; dp[0] = true; for (int i = 0; i < nums.size(); i++) { for (int j = sum; j >= nums[i]; j--) { dp[j] = dp[j] || dp[j - nums[i]]; } } return dp[sum]; } };