1. 程式人生 > >資料結構上機實驗五——01揹包問題

資料結構上機實驗五——01揹包問題

  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;
}