01背包问题

来源:互联网 发布:java multiply用法 编辑:程序博客网 时间:2024/06/07 06:20
public class package0_1 {
int V[][] = new int[200][200];//物品选取,背包承重
int max(int a,int b){
if(a>=b){
return a;
}else return b;
}

int answer(int number,int weight[],int value[],int choose[],int Weight ){

int i,j;
for(i=0;i<=number;i++){
V[i][0]=0;
}
for(j=0;j<=Weight;j++){
V[0][j]=0;
}
for(i=1;i<=number-1;i++){
for(j=0;j<=Weight;j++){
if(j<weight[i]){
V[i][j]=V[i-1][j];
}else{
V[i][j]=max(V[i-1][j],V[i-1][j-weight[i]]+value[i]);
}
}
}
j=Weight;
for(i=number-1;i>0;i--){
if(V[i][j]>V[i-1][j]){
choose[i]=1;
j=j-weight[i];

}else{
choose[i]=0;
}
}
System.out.println("选中的物品的状态是:");
for(i=0;i<number;i++){
System.out.println(choose[i]);
}

return V[number-1][Weight];
}
public static void main(String[] args) {
int s;//获取的最大价值
int w[] = new int[10];//物品的重量
int x[] = new int[10];//物品的选取状态
int v[] = new int[10];//物品的价值
int n,i;
int C;//包裹的最大容量
n=5;
System.out.println("请驶入背包的最大容量");
Scanner ss = new Scanner(System.in);
C = ss.nextInt();
System.out.println("请输入物品的重量:");
for(i=0;i<n;i++){
int array1 = ss.nextInt();
w[i] = array1;
}
System.out.println("请输入物品的价值:");
for(i=0;i<n;i++){
int array2 = ss.nextInt();
v[i] = array2;
}
package0_1 pack = new package0_1();
s=pack.answer(n,w,v,x,C);
System.out.println("物品的最大价值为");
System.out.println(s);
}
}
原创粉丝点击