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

2021-09-14 07:29:40 字數 1294 閱讀 9043

由於最近在複習演算法設計與分析,所以就想試著完成一下書上的**。

描述:揹包問題:

給定重量分別為,價值分別為的n件物品,和乙個承重為w的揹包。求這些物品中乙個最有價值的子集,並能裝到揹包中。

揹包問題的蠻力解法是窮舉這些物品的所有子集,找出能夠裝到揹包中的所有子集,並在這些子集中找出價值最大的子集

實驗資料:

揹包容量為10

給定4個物品,重量為

對應的價值為:

輸出的結果

選中重量為4,5的物品

總價值為65

事先說明個人看法:個人認為自己這個方法很笨,並且很冗雜,毫無美感。同時也搜尋了一些dalao們的方法,有用dfs的,也有遞迴的。但是奈何自己看不懂,所以就只好自己想出笨方法來做了。

**如下

#include#include#includeusing namespace std;

int c; //揹包的容量

int bag_values=0;//揹包(裝入)的價值 初始化為0

int goods_num; //貨物的數量

int maxvalue = -1; //定義最大的價值

int calc_arrangement(); //函式 在後面實現

struct things

; }goods[1001];

//直接計算所有貨物的全排列

int calc_arrangement()

else

continue;

} head++; }

int index=-1; //用這個來記錄我所取得的value最大的下標

for (int j = tail - 1; j > 0; j--)

}else

continue;

} return index;

}int main()

int index=calc_arrangement();

cout **執行如下

感覺其中還是略微用到了佇列的思想。

希望能夠幫助大家。

遇事不決,可問春風。

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

編寫乙個程式,輸出2 10000之間的所有完全數。所謂完全數,是指這樣的數,該數的各因子 除該數本身外 之和正好等於該數本身,例如 6 1 2 3 28 1 2 4 7 14 include using namespace std intmain if m s cout s 問題描述 對於給定的正整...

演算法分析與設計 蠻力法0 1揹包

蠻力法是一種簡單直接解決問題的方法,常常直接基於問題的描述,所以蠻力法也是最容易應用的方法。蠻力法所依賴 的基本技術是遍歷,即採用一定的策略依次處理待求解問題的所有元素,從而找出問題的解。由於其需要依次窮舉待處理的元素,因此蠻力法是一種典型的指數級時間演算法。給定n個重量為 價值為的物品和乙個容量為...

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

先佔坑 include include 以下三個庫用於計算程式運算時間 include include include using namespace std define n 100 struct goods int n,bestvalue,cv,cw,c 物品數量,價值最大,當前價值,當前重量,...