package LeetCode.DPpart04; /** * 416. 分割等和子集 * 给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 * 示例: * 输入:nums = [1,5,11,5] * 输出:true * 解释:数组可以分割成 [1, 5, 5] 和 [11] 。 * */ public class PartitionEqualSubsetSum_416 { public static void main(String[] args) { int [] nums = {1,5,11,5}; boolean result = canPartition(nums); System.out.println(result); } public static boolean canPartition(int[] nums) { if(nums == null || nums.length == 0) return false; int n = nums.length; int sum = 0; for(int num : nums) { sum += num; } //总和为奇数,不能平分 if(sum % 2 != 0) return false; int target = sum / 2; int[] dp = new int[target + 1]; for(int i = 0; i < n; i++) { for(int j = target; j >= nums[i]; j--) { //物品 i 的重量是 nums[i],其价值也是 nums[i] dp[j] = Math.max(dp[j], dp[j-nums[i]] + nums[i]); } } return dp[target] == target; } }
标签:target,nums,int,sum,part04,416,day42,dp From: https://www.cnblogs.com/lipinbigdata/p/17459319.html