0-1背包问题

来源:互联网 发布:网络叫爸爸是什么意思 编辑:程序博客网 时间:2024/06/03 18:18
package coding;import java.util.Scanner;class GType{    double value;    double weight;    char isSelect;}public class cha9_backpack {  static double maxvalue;  static double totalvalue;  static double maxwt;  static int num;  static char[] seltemp;  static void backpack(GType[] goods,int i,double wt,double vt){      int k;      if(wt+goods[i].weight<=maxwt){          seltemp[i]=1;          if(i<num-1){              backpack(goods,i+1,wt+goods[i].weight,vt);          }          else{              for(k=0;k<num;++k){                  goods[k].isSelect=seltemp[k];              }maxvalue=vt;          }      }      seltemp[i]=0;      if(vt-goods[i].value>maxvalue){          if(i<num-1){              backpack(goods,i+1,wt,vt-goods[i].value);          }else{              for(k=0;k<num;++k){                  goods[k].isSelect=seltemp[k];              }              maxvalue=vt-goods[i].value;          }      }  }    public static void main(String[] args) {        // TODO Auto-generated method stub          double sumweight;          int i;          System.out.println("背包问题求解");          System.out.println("背包能够容纳的最大重量:");          Scanner input=new Scanner(System.in);          maxwt=input.nextDouble();          System.out.println("可选物品重量:");          num=input.nextInt();          GType[] goods=new GType[num];          seltemp =new char[num];          totalvalue=0;          for(i=0;i<num;i++){              GType t=new GType();              System.out.println("输入第"+(i+1)+"号物品的重量和价值");              t.weight=input.nextDouble();              t.value=input.nextDouble();              totalvalue+=t.value;              goods[i]=t;          }          System.out.println("背包能够装的最大重量为"+maxwt);          for(i=0;i<num;i++){              System.out.println("第"+(i+1)+"号物品重:"+goods[i].weight+"价值"+goods[i].value);          }          for(i=0;i<num;i++){              seltemp[i]=0;          }          maxvalue=0;          backpack(goods,0,0.0,totalvalue);          sumweight=0;          System.out.println("可以将以下物品装入背包,使背包装的物品价值最大");          for(i=0;i<num;++i){              if(goods[i].isSelect==1){                  System.out.println("第"+i+1+"号物品,重量:"+goods[i].weight+"价值:"+goods[i].value);                  sumweight+=goods[i].weight;              }          }          System.out.println("总重量为:"+sumweight+"总价值为:"+maxvalue);    }}
0 0
原创粉丝点击