例子:
背包容量为W=20,有n=3个价值为v={18,15,10},重量为w={25,24,15}的物品。可以部分选择物品加入到背包中,使得背包中的总价值最大,求每件物品的选择配比解向量x。
?
分析:
?
递推式:
?
Java实现代码:
public final class exp_5 { ????private exp_5(){ ???????? ????} ????public static double[] getX(int W,int[] w,int[] v){ ????????//存放单位价值的数组 ????????double[] uv = new double[w.length]; ????????for(int i=0;i<w.length;i++){ ????????????uv[i] = (double)v[i]/(double)w[i]; ????????} ????????//存放结果的X,存放单位价值数组排序后各个下标的pos ????????double[] X = new double[uv.length]; ????????int[] pos = MathUtil.sort(uv, false); ????????//解X ????????for(int i=0;i<uv.length;i++){ ????????????if(w[pos[i]] <= W){ ????????????????X[pos[i]] = 1; ????????????????W -= w[pos[i]]; ????????????}else{ ????????????????X[pos[i]] = (double)W/(double)w[pos[i]]; ????????????????W = 0; ????????????} ????????} ????????return X; ????} } |
原文:https://www.cnblogs.com/jawide/p/12899877.html