https://leetcode-cn.com/problems/partition-equal-subset-sum
Note:
Each of the array element will not exceed 100.
The array size will not exceed 200.
?
Example 1:
Input: [1, 5, 11, 5]
Output: true
Explanation: The array can be partitioned as [1, 5, 5] and [11].
Example 2:
Input: [1, 2, 3, 5]
Output: false
Explanation: The array cannot be partitioned into equal sum subsets.
如图,令集合为1 5 11 5 sum一半是1,背包从0到12
背包 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
初始化 | true | false | false | false | false | false | false | false | false | false | false | false | false |
1 | T | T | F | F | F | F | F | F | F | F | F | F | F |
5 | T | T | F | F | F | T | T | F | F | F | F | F | F |
11 | T | T | F | F | F | T | T | F | F | F | F | T | T |
5 | T | T | F | F | F | T | T | F | F | F | F | T | T |
这该死的长度限制 cnblog改一下
class Solution {
public:
bool canPartition(vector<int>& nums) {
int n = nums.size();
int sum=0;
for (int num : nums) sum += num;
if(sum % 2) return false;
sum = sum/2;
vector<bool> dp(sum+1, false);
dp[0] = true;
for(int i=0;i<n;i++){
for(int j=sum;j>=nums[i];j--){
dp[j] = dp[j] || dp[j-nums[i]];
}
}
return dp[sum];
}
};
Leetcode 416. Partition Equal Subset Sum
原文:https://www.cnblogs.com/islch/p/12599422.html