天天看點

貪心法解決0-1背包問題

貪心法是指 在背包沒有裝滿之前,隻要能裝得下就裝進背包.

在使用貪心法解決0-1背包問題主要在于分解方案和貪心選擇方案.(貪心法不能保證最優解)

為了盡可能的得到最優解,選擇物品時,總是選擇v[i]/w[i]最大的物品裝進去

是以在程式的開始,應首先對物品按照v[i]/w[i]從大到小進行排序,是以在排序的過程中可以定義一個數組來記錄原本的第i個物品在排序之後放在第幾位,即th[i]=k:原來的第i個物品放在現在的第K個裡面.(也可以定義一個結構體在結構體中記錄原來的次序)

public class tanXin {
	int TanXin(int[] w,int[] v,int[] x,int[] th,int max,int Total){
	    int k = 0,q,c=Total;
	    int sum =0;
	    while(k<max){
	        if(w[th[k]]< c){
	            sum+=v[th[k]];
	            c-=w[th[k]];
	            x[th[k]]=1;
	       }
	       k++;
	    }
		return sum;
	}
}