01揹包 (遞迴解決)

2021-09-23 06:10:58 字數 548 閱讀 9193

01揹包,設定乙個揹包,他有乙個maxweight,現在你有n個物品,每個物品都有重量與其價值,現在要你求取得的最大價值。

運用遞迴的思想,假如現在是從最後乙個開始選,如果這個東西的重量大於揹包的重量,那是不是可以從第n-1個物體開始選。

假如這個東西的重量小於揹包的重量,那麼現在你將面臨兩個選擇,一不選,那麼你就跳過了這個物品,就可以從n-1開始選。 二,選,假如你選了的話,那麼揹包的重量就減少了,而且揹包的價值提高了,那麼就可以給定乙個數去儲存 這個價值並繼續從下乙個開始選。最後比較n,n-1,。。。。到0的價值大小。 就給定乙個比較大小的函式即可輸出最大價值。

**如下:

#include #includeusing namespace std;

struct a //建立結構體儲存重量與價值

bag[100];

int find(int weight,int n)//遞迴函式,返回最大值

}int main()

cout << find(bagweight, num);

}

0 1揹包問題(遞迴解決)

問題剖析 0 1揹包問題規定每個物品要麼選,要麼不選。因此可以設定物品選擇向量為y y1,y2,yn 那麼當yn 1時,y y1,y2,yn 1 必然為f n 1,c wn 的物品選擇向量,當yn 0時,必然為f n 1,c 的最優物品選擇向量。所以此時可以考慮動態規劃解法。得到根據上面的分析,我們...

回溯法解決0 1揹包問題 遞迴

include include include using namespace std typedef struct thing thing things const int goods 7 物品的數量 int max weigth 150 揹包承受的重量 int information 2 goo...

完美解決揹包問題 01揹包 完全揹包

01揹包 每種物品就有乙個 c 3,2,6,7,1,4,9,5 cost 單個物品所佔容量 v 6,3,5,8,3,1,6,9 每個物品的價值 target 15 揹包容量 f 0 for i in range 0,target 1 初始化 元素個數為揹包大小加1 target 1 n len c ...