01背包问题

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值