【問題描述】
給定n個重量為,價值為的物品和乙個容量為c的揹包,0、1揹包問題是求這些物品中的乙個
最有價值的子集,並且能夠裝入揹包中。
【基本演算法思想】
暴力法:
用暴力法解決0、1揹包問題,需要考慮給定n個物品集合的所有子集,找出所有重量不超過揹包重量的子集,計算其每個子集的
總價值,比較輸出價值最大的那個子集。
複雜度分析: 乙個具有n個元素的集合,其子集數量為2的n次方,暴力法全集遍歷時,其複雜度為o(2的n次方)。
【源**】//0-1揹包問題c++語言實現
#include
#include
#include
#include
#include
using
namespace
std;
int main()
}if(sumweight<=c&&sumvalue>maxvalue)
}cout
<<"\n取重量為下列的子集:\n"; //輸出結果
for(i=0;iif(res[i])cout
<" ";
cout
<<"\n最大價值為:"
0;}
演算法設計與分析 蠻力法求解0 1揹包問題
由於最近在複習演算法設計與分析,所以就想試著完成一下書上的 描述 揹包問題 給定重量分別為,價值分別為的n件物品,和乙個承重為w的揹包。求這些物品中乙個最有價值的子集,並能裝到揹包中。揹包問題的蠻力解法是窮舉這些物品的所有子集,找出能夠裝到揹包中的所有子集,並在這些子集中找出價值最大的子集 實驗資料...
演算法分析與設計 蠻力法0 1揹包
蠻力法是一種簡單直接解決問題的方法,常常直接基於問題的描述,所以蠻力法也是最容易應用的方法。蠻力法所依賴 的基本技術是遍歷,即採用一定的策略依次處理待求解問題的所有元素,從而找出問題的解。由於其需要依次窮舉待處理的元素,因此蠻力法是一種典型的指數級時間演算法。給定n個重量為 價值為的物品和乙個容量為...
演算法(揹包問題 01揹包問題)
01揹包問題 有 n 件物品和乙個容量是 v 的揹包。每件物品只能使用一次。第 i 件物品的體積是 vi,價值是 wi。求解將哪些物品裝入揹包,可使這些物品的總體積不超過揹包容量,且總價值最大。輸出最大價值。輸入格式 第一行兩個整數,n,v,用空格隔開,分別表示物品數量和揹包容積。接下來有 n 行,...