枚举算法 实现背包问题

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);
  
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值