leetcode解题之416#Partition Equal Subset SumJava版. 对半分(0-1背包,动态规划)
来源:互联网 发布:mysql免费吗 编辑:程序博客网 时间:2024/05/22 12:01
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: trueExplanation: The array can be partitioned as [1, 5, 5] and [11].
Example 2:
Input: [1, 2, 3, 5]Output: falseExplanation: 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[n][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[n][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/2if (dp[n - 1][sum] == sum)return true;elsereturn false;}}}参考:http://blog.csdn.net/mebiuw/article/details/52765840
0 0
- leetcode解题之416#Partition Equal Subset SumJava版. 对半分(0-1背包,动态规划)
- Leetcode 416. Partition Equal Subset Sum 对半分 解题报告【修正版】
- Leetcode-416. Partition Equal Subset Sum(01背包拓展)
- 动态规划-416. Partition Equal Subset Sum
- leetcode 416. Partition Equal Subset Sum 动态规划DP + DFS深度优先遍历
- Leetcode 416 - Partition Equal Subset Sum(dp)
- leetCode No.416 Partition Equal Subset Sum
- LeetCode[416] Partition Equal Subset Sum
- LeetCode 416 Partition Equal Subset Sum
- LeetCode #416: Partition Equal Subset Sum
- LeetCode No.416 Partition Equal Subset Sum
- leetcode 416 c++. 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 解题报告
- [LeetCode] 416. Partition Equal Subset Sum 解题报告
- [Leetcode] 416. Partition Equal Subset Sum 解题报告
- 寻找卓越的(Android)软件工程师( 译)
- redis 简介
- 将数据以表格的形式保存到pdf中
- #android training# Graphics & Animation:Display Bitmaps Efficiently
- 进一步了解安卓开发
- leetcode解题之416#Partition Equal Subset SumJava版. 对半分(0-1背包,动态规划)
- jquery是JavaScript的一个库,也就是说就算使用jQuery,也要遵守JavaScript的语法,为什么jQuery还有自己的语法?
- MySQL 5.7.17 绿色版 如何安装
- python2.7使用TimeDelta中total_seconds()方法的问题
- 踩过的坑
- MT7628如何控制GPIO
- JAVA代码自动生成.xls和.xlsx类型的excel文件的详细过程和代码
- HTML5头部常用的<head>总结
- springmvc 中各种数据配置