import java.util.Vector;
public class PackageTest {
/**
* 背包算法:最优化问题,为一个给定空间或负重的背包和许多大小不一的物体分配适合的空间
* 哪些物体放入背包才能使得浪费的背包空间或负重最小?
* 在背包很小和物体数目较少时,这个问题还比较容易解决,但当背包很大且有很多个物体时,
* 问题的求解就十分困难,通常这个问题会有一个或多个解,也有可能根本没有解。。。。
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int a[]={11,8,7,6,5};
int b[]={13,8,7,6,5};
int total=20;
int leftbound=total;
int max=0;
int i=0;
int j=0;
Vector v1=new Vector();
Vector v2=new Vector();
while(j<5){
i=j;
while(i<5){
if(a[i]<=leftbound){
v1.addElement(new Integer(a[i]));
v2.addElement(new Integer(i));
}
if(i>=4 && !v1.isEmpty()){
int value=0;
for(int k=0;k<v1.size();k++){
System.out.print(((Integer)v1.elementAt(k)).intValue());
System.out.print(",");
value=value+b[((Integer)v2.elementAt(k)).intValue()];
}
System.out.println("value="+value);
if(max<value){
max=value;
}
leftbound=leftbound+((Integer)v1.remove(v1.size()-1)).intValue();
i=((Integer)v2.remove(v2.size()-1)).intValue()+1;
continue;
}
i++;
}
j++;
leftbound=total;
int value=0;
for(int k=0;k<v1.size();k++){
System.out.println((Integer)v1.elementAt(k));
System.out.println(",");
value=value+b[((Integer)v2.elementAt(k)).intValue()];
}
System.out.println("value="+value);
if(max<value){
max=value;
}
while(!v1.isEmpty()){
v1.remove(v1.size()-1);
v2.remove(v2.size()-1);
}
}
System.out.println("max="+max);
}
}
背包算法
最新推荐文章于 2020-10-15 13:23:13 发布