先佔坑
#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的揹包。求這些物品中乙個最有價值的子集,並能裝到揹包中。揹包問題的蠻力解法是窮舉這些物品的所有子集,找出能夠裝到揹包中的所有子集,並在這些子集中找出價值最大的子集 實驗資料...