蠻力法求解0 1揹包問題C

2021-10-07 09:50:59 字數 1239 閱讀 6105

先佔坑

#include

#include

//以下三個庫用於計算程式運算時間

#include

#include

#include

using

namespace std;

#define n 100

struct goods

;int n,bestvalue,cv,cw,c;

//物品數量,價值最大,當前價值,當前重量,揹包容量

int x[n]

,cx[n]

;//最終儲存狀態,當前儲存狀態

struct goods goods[n]

;int

force

(int i)

return bestvalue;

}cw = cw + goods[i]

.wight;

cv = cv + goods[i]

.value;

cx[i]=1

;//裝入揹包

force

(i+1);

cw = cw-goods[i]

.wight;

cv = cv-goods[i]

.value;

cx[i]=0

;//不裝入揹包

force

(i+1);

return bestvalue;

}int

main()

int sum1 =

force(0

);printf

("蠻力法求解0/1揹包問題:\nx=[");

for(

int i=

0;i)printf

("] 裝入總價值%d\n"

,sum1)

; finish=

clock()

; time =

(double

)(finish-starttime)

/1000

;//時間單位為秒

starttime=

clock()

;//用於計算程式執行時間

cout<<

"time is:"

<

return0;

}

執行結果

0 1揹包問題(蠻力法)

用蠻力法解決0 1揹包問題 例子輸入 4 6 5 43 4 2 31 1輸出 10 6 8 include include using namespace std intmain int w 5 v 5 int max 0 每輪最大價值 int max1 0 最終最大價值 int weight 0 ...

蠻力法解決0 1揹包問題

使用蠻力法解決0 1揹包問題,就是將所有的物品裝入揹包的可能全部列舉出來。這個可以通過遞迴的方式實現。遞迴的過程可以看成是對一棵樹的深度優先遍歷 例如上圖,假設從揹包中的1號物品開始列舉所有的可能。如果每一層僅僅簡單的在迴圈中使用遞迴,則該程式就不會結束。需要使用乙個一維向量用於標記當前哪些編號已經...

演算法設計與分析 蠻力法求解0 1揹包問題

由於最近在複習演算法設計與分析,所以就想試著完成一下書上的 描述 揹包問題 給定重量分別為,價值分別為的n件物品,和乙個承重為w的揹包。求這些物品中乙個最有價值的子集,並能裝到揹包中。揹包問題的蠻力解法是窮舉這些物品的所有子集,找出能夠裝到揹包中的所有子集,並在這些子集中找出價值最大的子集 實驗資料...