首先通过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
*