一:分組背包問題
(一)問題詳述


(二)實現思路
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; }
