众所周知,牛能和牛可乐经常收到小粉丝们送来的礼物,每个礼物有特定的价值,他俩想要尽可能按照自己所得价值来平均分配所有礼物。
那么问题来了,在最优的情况下,他俩手中得到的礼物价值和的最小差值是多少呢?
p.s 礼物都很珍贵,所以不可以拆开算哦
[1,2,3,4]
0
他俩一个人拿1,4 。另一个人拿2,3
[1,3,5]
1
他俩一个人拿1,3.另一个人拿5
单个礼物价值不超过100,礼物个数小于100,所有礼物总价值不超过10000
import java.util.*; public class Solution { /** * * @param presentVec int整型一维数组 每个礼物的价值 * @return int整型 */ public int maxPresent (int[] presentVec) { // write code here int n = presentVec.length; if(n == 0) return 0; int sum = 0; for(int i = 0; i < n; i++){ sum += presentVec[i]; } //简化为背包问题 int v = (sum + 1) / 2; int[] dp = new int[v+1]; for(int i = 0; i < n; i++){ int p = presentVec[i]; for(int j = v; j >= p; j--){ dp[j] = Math.max(dp[j], dp[j-p]+p); } } int result = 2*dp[v] - sum; return result >= 0 ? result : -result; } }