问题:2n个整数选n个整数,和剩下的n个整数的和的差最小
建立一个二维数组,自低向上,将2n个整数的和的一半的所有最优解列举出来,选择符合题目要求的最优解。
其状态方程是:
其中j是所有和的可能性的值,Vn是数组中最后一个值,i是遍历V的所有值;
j < Vn dp(n, j)= 0
j >= Vn dp(n, j)= vn
0<= j < wi dp(i, j)=dp(i+1,j)
dp(i+ j >= Vi dp(i, j)= max{dp(i+1, j), dp(i+1, j-wi)+vi}
具体代码如下:
其中dp数组列举了所有可能和的最优解,x数组是最优解所对应的数值。
public class DPInteger2N {
public static void main(String[] args) {
int[] v={
12,4,5,13};
int sum=0;
for (int i=0;i<v.length;i++){
sum+=v[i];
}
int mid=sum/2;
int[][] dp=new int[v.length][mid+1];
getN(v,dp,mid);
System.out.println