0 1 背包问题
416. 分割等和子集
解题思路
代码实现
var canPartition = function(nums) {
var sum =0;
const n = nums.length;
if (n < 2) {
return false;
}
for(let i=0;i<nums.length;i++){
sum +=nums[i];
}
var target = sum/2;
if(Math.floor(target) !== target){
return false;
}
const dp = new Array(target+1).fill(0);
dp[0] = 0;
for(let i=0;i<nums.length;i++){
for(let j=target;j>0;j--){
if(j - nums[i] < 0){dp[j] = dp[j];}else{dp[j] = Math.max(dp[j], dp[j-nums[i]]+nums[i])};
}
}
console.log(dp[target],target)
return dp[target] === target;
};