public static int getNum(int[] nums) { if (nums == null || nums.length == 0) return 0; int target = 0; int n = nums.length; for (int i = 0; i < nums.length; ++i) target += nums[i]; boolean[][] dp = new boolean[n + 1][target + 1]; dp[0][0] = true; int i, j; for (j = 1; j <= target; ++j) dp[0][j] = false; for (i = 1; i <= n; ++i) { for (j = 1; j <= target; ++j) { dp[i][j] = dp[i - 1][j]; if (j >= nums[i - 1]) dp[i][j] = dp[i - 1][j - nums[i - 1]] || dp[i][j]; } } for (j = target; j >= 0; --j) { if (dp[n][j] && dp[n][j / 2]) return j / 2; } return -1; }
点赞 评论

相关推荐

07-02 10:39
门头沟学院 Java
Steven267:说点真实的,都要秋招了,还没有实习,早干嘛去了,本来学历就差,现在知道急了,而且你这个简历完全可以写成一页,劣势太大了,建议转测试
点赞 评论 收藏
分享
牛客网
牛客网在线编程
牛客网题解
牛客企业服务