题目描述:
方法1:把题目修改为0-1背包问题,nums[i] 为物品i的重量与价值,背包容量为nums元素之和的一半,如果装的最大价值为背包容量,则返回true
class Solution {
public:
bool canPartition(vector<int>& nums) {
int sum = 0;
for(int i=0;i<nums.size();i++) sum += nums[i];
if(sum%2 == 1)return false;//元素之和为奇数,肯定撒false
int n = nums.size();//物品种类
int m = sum/2;//背包容量
vector<int>dp(m+1,0);
for(int i=0;i<n;i++){
for(int j=m;j>=nums[i];j--) dp[j] = max(dp[j],dp[j-nums[i]] + nums[i]);
}
return dp[m]==m?true:false;
}
};