众所周知,牛能和牛可乐经常收到小粉丝们送来的礼物,每个礼物有特定的价值,他俩想要尽可能按照自己所得价值来平均分配所有礼物。
那么问题来了,在最优的情况下,他俩手中得到的礼物价值和的最小差值是多少呢?
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;
}
}