資料結構上機實驗五——01揹包問題
阿新 • • 發佈:2019-01-03
01揹包問題
編寫一個程式,求解揹包問題:設有不同價值、不同重量的物品n件,求從這n件物品中選取一部分物品的方案,使選中物品的總重量不超過指定的限制重量,但選中物品的總價值最大。
程式碼:
#include <iostream> using namespace std; int sum=0; //儲存書包存放物品的最大價值 struct item { int value; int weight; } a[99]; bool f(int WeightMax,int num) { if(WeightMax==0) return true; if(WeightMax<0||(WeightMax>0&&num<0)) return false; if(f(WeightMax-a[num-1].weight,num-1)) { cout<<" 第"<<num<<"種物品"<<endl; sum+=a[num-1].value; return true; } else return f(WeightMax,num-1); } int main() { int num,WeightMax; char ch; cout << "物品種類:"; cin>>num; for(int i=0; i<num; i++) { cout<<" 第"<<i+1<<"種物品(重量,價值):"; cin>>a[i].weight>>ch>>a[i].value; } cout<<"揹包所能承受的最大重量是:"; cin>>WeightMax; cout<<"最佳裝填方案是:"<<endl; f(WeightMax,num); cout<<"總價值="<<sum<<endl; return 0; }