背包问题

53 阅读1分钟

背包问题

//背包问题

public static int bag(int totalV,int[] weights,int[] values) {

    if(weights==null||weights.length==0) {

        return 0;

    }

    int n=weights.length;

    int m=totalV;

    int[][] v=new int[n+1][m+1];

    for (int i = 0; i < v.length; i++) {

        v[i][0]=0;

    }

    for (int i = 0; i < v[0].length; i++) {

        v[0][i]=0;

    }

    for (int i = 1; i < v.length; i++) {

        for (int j = 1; j < v[0].length; j++) {

        if(weights[i-1]>j){

            //当前物品的重量大于背包容量

            v[i][j]=v[i-1][j];

        }else {

            //当前物品的重量小于背包容量

            //物品的价值+背包剩余容量能装的物品的价值

            v[i][j]=Math.max(v[i-1][j], v[i-1][j-weights[i-1]]+values[i-1]);

            }

        }

    }

    return v[n][m];

}