您的位置:首页 > 编程语言 > Java开发

01背包问题--Java

2017-04-07 21:03 78 查看
关于01背包,网上很少用Java完成,大多是用c/c++,这让学习Java的非常难受,比如我,今天终于把01背包搞清楚了,趁热打铁,为此写下此博。。。。

例如:一个背包可以装重量为10的物品,现在有重量分别为2、3 、4 、5、8、9的物品,其价值分别为3、4、5、8、10.问这样才能使背包的到最大价值?

首先送上公式:

B[k][c]=Math.max(value1,value2);当第k个物品的重量大于当前所剩重量时:B[k-1][c],当小于时分两种情况:选择不装入k,那么value1=B[k-1][c],装入k:  value2=B[k-1][c-w[k]+v[k](w[k]为第k个的重量,v[k]为第k个的价值).

送上一个背包模拟网站http://www.karaffeltut.com/NEWKaraffeltutCom/Knapsack/knapsack.html

Java:

import java.util.Scanner;

public class 我的背包 {
static int N=6,W=11;
static int [][]B=new int
[W];
public static void cap(int w[],int V[]){

for(int k=1;k<N;k++){
for(int c=1;c<W;c++){
if(w[k]>c){//不能装入
B[k][c]=B[k-1][c];
}else {
int value1=B[k-1][c-w[k]]+V[k];//选择装入
int value2=B[k-1][c];//选择不装
B[k][c]=Math.max(value1, value2);看装与不装那个的价值大
}
}
}
}
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int w[]=new int
;
int v[]=new int[W];
w[0]=0;
v[0]=0;
for(int i=1;i<N;i++){
w[i]=in.nextInt();
v[i]=in.nextInt();
}
cap(w,v);
System.out.println(B[5][10]);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息