package meiju;
import java.util.Scanner;
/**
* 1)设计一个枚举算法,解决如下背包问题:设有4个物体,其重量和价值分别如下所示:
物体 重量 价值
1 7 42
2 3 12
3 4 40
4 5 25
现在,有一个承重最多10的背包,请设计算法,输出背包中价值最高的物体组合时的物体编号,以及价值总和。例如:
C:\>_
按照编号、重量、价值输入:
1,7,42
2,3,12,
3,4,40,
4,5,25
背包中物体组合:3,4
价值总和:65
* @author air
*
*/
public class MeiJuBeiBao {
public static void main(String[] args) {
// int[][] arr = new int[4][3];
//将数据存为二维数组形式
int[][] arr = {{1,7,42},{2,3,12},{3,4,40},{4,5,25}};
//存储每次列举出的情况
int flag[]={0,0,0,0};
//最大价值
int max=0;
//物品
String maxWp="";
//数据操作 列举有16中情况
for(int b=0;b<16;b++){
int sum=0;
int vsum=0;
String wp="";
for(int a=0;a<4;a++){
if(flag[a]==0){
flag[a]=1;
continue;
}else{
flag[a]=0;
break;
}
}
//每种情况的操作
for(int f=0;f<4;f++){
if(flag[f]==1){
sum+=arr[f][1];
wp=wp+","+arr[f][0];
vsum+=arr[f][2];
}
}
if(sum<=10&&max<vsum){
max=vsum;
maxWp=wp;
}
}
//数据输出
for(int a=0;a<4;a++){
for(int b=0;b<3;b++){
System.out.print(arr[a][b]);
}
System.out.println("");
}
System.out.println(max);
System.out.println(maxWp);
}
}
import java.util.Scanner;
/**
* 1)设计一个枚举算法,解决如下背包问题:设有4个物体,其重量和价值分别如下所示:
物体 重量 价值
1 7 42
2 3 12
3 4 40
4 5 25
现在,有一个承重最多10的背包,请设计算法,输出背包中价值最高的物体组合时的物体编号,以及价值总和。例如:
C:\>_
按照编号、重量、价值输入:
1,7,42
2,3,12,
3,4,40,
4,5,25
背包中物体组合:3,4
价值总和:65
* @author air
*
*/
public class MeiJuBeiBao {
public static void main(String[] args) {
// int[][] arr = new int[4][3];
//将数据存为二维数组形式
int[][] arr = {{1,7,42},{2,3,12},{3,4,40},{4,5,25}};
//存储每次列举出的情况
int flag[]={0,0,0,0};
//最大价值
int max=0;
//物品
String maxWp="";
//数据操作 列举有16中情况
for(int b=0;b<16;b++){
int sum=0;
int vsum=0;
String wp="";
for(int a=0;a<4;a++){
if(flag[a]==0){
flag[a]=1;
continue;
}else{
flag[a]=0;
break;
}
}
//每种情况的操作
for(int f=0;f<4;f++){
if(flag[f]==1){
sum+=arr[f][1];
wp=wp+","+arr[f][0];
vsum+=arr[f][2];
}
}
if(sum<=10&&max<vsum){
max=vsum;
maxWp=wp;
}
}
//数据输出
for(int a=0;a<4;a++){
for(int b=0;b<3;b++){
System.out.print(arr[a][b]);
}
System.out.println("");
}
System.out.println(max);
System.out.println(maxWp);
}
}