leetcode解题之416#Partition Equal Subset SumJava版. 对半分(0-1背包,动态规划)
2017-03-23 09:20
423 查看
416. Partition Equal Subset Sum
Given a non-empty array containingonly positive integers, find if the array can be partitioned into two subsets such that the sum of elements in both subsets is equal.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、依然数组的和必须要是偶数,否则无法划分,共计n个数,这里价值value/weight都等于nums
2、将问题转化为背包问题,即取前I个数(物品),和体积j下,dp[i][j]的最大值
dp[i][j]=max{ dp[i-1][j], dp[i-1][j-nums[i]]+nums[i] }。
3、这样dp
[sum/2] 如果等于sum/2 就证明用了这n个数下,正好能加出一个sum/2,所以就自然而然的通过了
public class Solution { public boolean canPartition(int[] nums) { int sum = 0; for (int num : nums) sum += num; if (sum % 2 == 1) return false; else { sum /= 2; int n = nums.length; // dp[i][j] 表示 如果我们取前i个数字,且背包容量为j的情况下,最多能放入多少东西 int dp[][] = new int [sum + 1]; // dp[0][0] 为初始状态,表示,没有任何没有东西没有体积,其余部分初始化 for (int i = nums[0]; i <= sum; i++) { dp[0][i] = nums[0]; } // 遍历n个数字,即视为n个产品 for (int i = 1; i < n; i++) { // 加入了这种物品后更新状态 for (int j = nums[i]; j <= sum; j++) { dp[i][j] = Math.max(dp[i - 1][j], dp[i - 1][j - nums[i]] + nums[i]); } } // 放满了才能表示正好1/2 if (dp[n - 1][sum] == sum) return true; else return false; } } }参考:http://blog.csdn.net/mebiuw/article/details/52765840
相关文章推荐
- [LeetCode]Partition Equal Subset Sum(Java)
- Leetcode解题笔记 416. Partition Equal Subset Sum [Medium] 动态规划
- leetCode No.416 Partition Equal Subset Sum
- LeetCode - 416 - Partition Equal Subset Sum
- leetcode 416 c++. Partition Equal Subset Sum
- LeetCode Partition Equal Subset Sum
- [LeetCode]Partition Equal Subset Sum
- Leetcode 416. Partition Equal Subset Sum 对半分 解题报告【修正版】
- [LeetCode] 416 Partition Equal Subset Sum
- leetcode 416 Partition Equal Subset Sum 对半分
- LeetCode[416] Partition Equal Subset Sum
- [LeetCode416]Partition Equal Subset Sum
- LeetCode—— Partition Equal Subset Sum
- [LeetCode] Partition Equal Subset Sum
- leetcode--- Partition Equal Subset Sum---动规
- [LeetCode] Partition Equal Subset Sum 相同子集和分割
- leetcode(416). Partition Equal Subset Sum
- [LeetCode] Partition Equal Subset Sum
- leetcode-416-Partition Equal Subset Sum
- Leetcode: Partition Equal Subset Sum