01揹包回溯法

2021-06-20 18:31:46 字數 844 閱讀 8167

計算機演算法基礎(第三版)(余祥宣、崔國華、等)華中科技大學出版社  中回溯法解決01揹包問題:

演算法思想:

基於貪心演算法的回溯演算法:

w、p陣列是按照效益p/w拍好序的陣列

#include const int n=8;//物品個數

const int m=110;

int w[n+1]=;//重量陣列,從1開始

int p[n+1]=;//效益陣列

//最終的重量和收益

int fw=0;

int fp=-1;

int x[n+1]=;//記錄最終物品的狀態

//當前重量和收益

int cw=0;

int cp=0;

int y[n+1]=;//當前物品的狀態

//限界函式

//p:當前效益,w:當前揹包重,k:上次去掉的物品

//返回新收益

int bound(int p,int w,int k)

else y[k]=0;

while(bound(cp,cw,k)<=fp)

k++; }}

int bound2(int p,int w,int k,int &pp,int &ww,int &i)

else return pp+(m-ww)*p[i]/w[i];

} return pp;

}void bag0_1_2()

cp=pp;

cw=ww;

k=j;

if(k>n)

else y[k]=0; }}

int main()

0 1揹包(回溯法)

描述 需對容量為c 的揹包進行裝載。從n 個物品中選取裝入揹包的物品,每件物品i 的重量為wi 價值為pi 對於可行的揹包裝載,揹包中物品的總重量不能超過揹包的容量,最佳裝載是指所裝入的物品價值最高。輸入 多個測例,每個測例的輸入佔三行。第一行兩個整數 n n 10 和c,第二行n個整數分別是w1到...

0 1揹包 回溯法

include include include using namespace std define n 100000 int n,c int cp 0,cw 0,bestp 0 cp是當前價值,cw是當前重量,bestp是當前最優值。int w n p n x n bestx n bestx陣列是...

0 1揹包 回溯法

演算法描述 0 1揹包的回溯法,與裝載問題的回溯法十分相似。在搜尋解空間樹時,只要其左兒子結點是乙個可行結點,搜尋就進入其左子樹。當右子樹中有可能包含最優解時才進入右子樹進行搜尋。否則將右子樹剪去。計算右子樹上界的更好演算法是 將剩餘物品依其單位重量價值排序,然後依次裝入物品,直至裝不下時,再裝入該...