动态规划-----2n个整数选n个整数,和剩下的n个整数的和的差最小

使用动态规划解决选择2n个整数中n个,使得剩下n个整数的和与选取n个的和之差最小的问题。通过建立二维数组,自底向上枚举所有可能的和,并找到最优解。具体实现代码及结果展示。
摘要由CSDN通过智能技术生成

问题: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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值