01背包

作者: zazalu | 来源:发表于2016-09-23 08:08 被阅读0次

    public class Knapsack_01 {
    public static int getBiggestValue(int[] w,int[] v,int bagWeight,int productNum){
    int[][] V = new int[productNum + 1][bagWeight + 1];

        for(int i = 0;i < productNum + 1;++i){
            V[i][0] = 0;
        }
        for(int j = 0;j < bagWeight +1;++j){
            V[0][j] = 0;
        }
        
        for(int i = 1;i < productNum +1;++i){
            for(int j = 1; j < bagWeight+1;++j){
                if(j < w[i-1]){
                    V[i][j] = V[i-1][j];
                }else if(j >= w[i-1]){
                    if(V[i-1][j] > V[i-1][j-w[i-1]] + v[i-1]){
                        V[i][j] = V[i-1][j];
                    }else{
                        V[i][j] = V[i-1][j-w[i-1]] + v[i-1];
    

    // System.out.print(i + "---->");
    }
    }
    }
    }

        return V[productNum][bagWeight];
    }
    
    public static int getBiggestValue(int bagWeight,int[] v,int[] w,int[] vw){
        int maxValues = 0;
        int j = 0;
        
        for(int i =0;i < vw.length;++i){
            if(w[vw[i]] <= bagWeight-j){
                j += w[vw[i]];
                maxValues += v[vw[i]];
            }else{
                maxValues += ((bagWeight -j)* (v[i]/w[i]));
                j = bagWeight;
            }
        }
        return maxValues;
    }
    public static void main(String[] args){
    int[] v = {20,30,65,40,60};
    
    int[] w = {10,20,30,40,50};
    int bagWeight = 100;
    
    int productNum = 5;
    
    System.out.println("01背包:"+Knapsack_01.getBiggestValue(w,v,bagWeight,productNum));
    
    
    int[] vf = {20,30,65,40,60};
    int[] wf = {10,20,30,40,50};
    int[] vwf = {2,0,1,4,3};
    System.out.println("分数背包:"+Knapsack_01.getBiggestValue(bagWeight, vf, wf, vwf));
    }
    

    }

    相关文章

      网友评论

          本文标题:01背包

          本文链接:https://www.haomeiwen.com/subject/jyktyttx.html