01背包问题
public class PacketDemo1 { int V; int T; int f[]; int w[];//价值
int c[];//体积
int flag; int INF=-66536; //核心 public void packet(){ if(flag==1){ for(int i=0;i<=V;i++){ //背包可以不存储满 f[i]=0; } } if(flag==0){ f[0]=0; for(int i=0;i<=V;i++){ //背包必须存储满 f[i]=INF; } } for(int i=0;i<T;i++) for(int v=V;v>=c[i];v--){ f[v]=max(f[v-c[i]]+w[i],f[v]); } System.out.println("背包所能容纳的最大价值为:"+f[V]); } public int max(int a,int b){ return a>b?a:b; } public void pack(){ Scanner sc=new Scanner(System.in); System.out.println("请输入背包容积"); V=sc.nextInt(); f=new int[V+1]; System.out.println("请输入物品数量"); T=sc.nextInt(); w=new int[T]; c=new int[T]; System.out.println("请分别输入物品价值"); for(int i=0;i<T;i++){ w[i]=sc.nextInt(); } System.out.println("请分别输入物品体积"); for(int i=0;i<T;i++){ c[i]=sc.nextInt(); } System.out.println("是否必须装满 是:0 否:1"); flag=sc.nextInt(); packet(); } public static void main(String[] args) { PacketDemo1 d=new PacketDemo1(); d.pack(); } }
版权声明:本文为博主原创文章,未经博主允许不得转载。