回溯法01揹包問題

2021-09-25 12:34:53 字數 1034 閱讀 5524

問題描述:

給定n種物品和一揹包。物品i的重量是wi>0,其價值為vi>0,揹包的容量為c。問應如何選擇裝入揹包中的物品,使得裝入揹包中物品的總價值最大?

源**:

public class 回溯法01揹包//backtrack函式

public static void backtrack(int t) 

return;

}if(cw + w[t] <= c)

if(bound(t+1)>bestp)//如若符合條件則搜尋右子樹

backtrack(t+1);

}

//計算上界函式,功能為剪枝

static double bound(int i)

//裝滿揹包

if(i<=count)

b+=w[i]/w[i]*leftw;

return b;//返回計算出的上界

}

//將物品按單價公升序的方法

public static void sort(int w1,int p1) 

}}

//展示物品重量價值的方法

public static void show(int w,int p) ;

//物品價值陣列

int p1 = ;

int c1 = 30;//最大容量

system.out.println("物品資訊為:");

show(w1,p1);//展示物品資訊

system.out.println("排序後物品資訊為:");

sort(w1,p1); //將物品按單價排序

show(w1,p1);//展示排序後物品資訊

//執行

loading(w1,p1,c1);

//顯示結果

showresult(bestx);

system.out.println("最優裝載為:" + bestp);

}

回溯法 0 1揹包問題

0 1揹包問題 給定n種物品和一揹包.物品i的重量是wi,其價值為ui,揹包的容量為c.問如何選擇裝入揹包的物品,使得裝入揹包中物品的總價值最大?分析 0 1揹包是子集合選取問題,一般情況下0 1揹包是個np問題.第一步 確定解空間 裝入哪幾種物品 第二步 確定易於搜尋的解空間結構 可以用陣列p,w...

0 1揹包問題 回溯法

0 1揹包問題 回溯法 一 專案描述 每種物品只有2 種選擇,分別為 裝入揹包或不裝入揹包,物品數和揹包容量已給定,計算裝入揹包物品的最大價值和最優裝入方案,用回溯法搜尋子集樹的演算法進行求解。二 演算法設計 a.物品有n種,揹包容量為c,分別用p i 和w i 儲存第i種物品的價值和重量,用x i...

回溯法 0 1揹包問題

include include using namespace std class knap void knap backtrack int i 對第i個物品進行操作 return 如果沒有到葉子節點,就要對這個節點進行操作,即搜尋它的子樹,進入做左子樹表示可以選第i個,進入右子樹表示不能選第i個 ...