01背包

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));
}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔...
    叶总韩阅读 10,538评论 0 41
  • Java经典问题算法大全 /*【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子...
    赵宇_阿特奇阅读 5,946评论 0 2
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 32,013评论 18 399
  • 回溯算法 回溯法:也称为试探法,它并不考虑问题规模的大小,而是从问题的最明显的最小规模开始逐步求解出可能的答案,并...
    fredal阅读 14,692评论 0 89
  • 参加了一场gitchat,还是有一定的收获。看到一句话,学过的东西要输出,所以打算写一篇文章记录下这几个问题以及当...
    _karen阅读 4,235评论 0 1