`
Getwaysun
  • 浏览: 31047 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类
最新评论

背包算法

阅读更多

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);
	}

}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics