動態規划---分組背包問題


一:分組背包問題

(一)問題詳述

(二)實現思路

01背包問題變種

(三)算法實現

#include <iostream>
#include <algorithm>

using namespace std;

const int N = 110;
int f[N],v[N],w[N];    //對應最大值,體重、價值
int n,  m;

int main()
{
    cin >> n  >> m;    //輸入物品組數、背包最大容量

    for (int i = 0; i < n; i++)    //循環物品組數
    {
        int s;        //獲取該組中的物品數
        cin >> s;
        for (int j = 0; j < s; j++)
            cin >> v[j] >> w[j];
        
        for (int j = m; j >= 0;j--)    //開始計算代價
            for (int k = 0; k < s; k++)    //按照分組進行計算
                if (j >= v[k])
                    f[j] = max(f[j], f[j - v[k]] + w[k]);
    }

    cout << f[m] << endl;
    system("pause");
    return 0;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM