day41
1、leetcode416 分隔等和子集
- 转化为01背包问题
- 背包的体积为sum / 2
- 背包要放入的商品(集合里的元素)重量为 元素的数值,价值也为元素的数值
- 背包如果正好装满,说明找到了总和为 sum / 2 的子集。
- 背包中每一个元素是不可重复放入。
class Solution {
public boolean canPartition(int[] nums) {
int sum = 0;
for(int num : nums) sum += num;
if(sum % 2 == 1) return false;
int target = sum / 2;
int dp[] = new int[target + 1];
for(int i=0; i<nums.length; i++) {
for(int j=target; j>=nums[i]; j--) {
dp[j] = Math.max(dp[j], dp[j-nums[i]]+nums[i]);
}
}
return dp[target] == target;
}
}

浙公网安备 33010602011771号