类似背包问题,在n个实数中找到和最接近sum的几个数

该博客探讨了一个问题,即如何在n个实数中寻找和最接近给定值sum的一组数。作者目前采用的方法是先找到最接近的和m,然后用动态规划解决背包问题找到和为m的数。作者寻求是否有更直接的算法能够在一步中完成这个任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先通过biggest方法获取最接近sum的和m,然后使用bag01D方法得到n个实数中和为m的几个数,这样相当于进行了两个背包问题的求解,大家有没有什么更好的方法能在biggest方法中就得到和为m的几个数呢??

代码如下:

 LinkedList<Double> listForBag01D=new LinkedList<Double>();
    /**
     * 从data数组下标1到n内找到和为sum的一组数字
     * @param data
     * @param n
     * @param sum
     */
    public void bag01D(double[] data,double sum,int n){
        if(n<0||sum<0)return ;
        if(Math.abs(sum-data[n])<0.000001){//比较double值的相等
            System.out.println(listForBag01D );
            System.out.println(data[n]);
        }
        listForBag01D.push(data[n]);
        bag01D(data,sum-data[n],n-1);
        listForBag01D.pop();
        bag01D(data,sum,n-1);
    }
    
    
    LinkedList<Double> doubleList=new LinkedList<Double>();
    /**
     * 从data中找到最接近于sum的和
     * @param data
     * @param index
     * @param sum
     * 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值