由於最近在複習演算法設計與分析,所以就想試著完成一下書上的**。
描述:揹包問題:
給定重量分別為,價值分別為的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 物品數量,價值最大,當前價值,當前重量,...