一:分组背包问题
(一)问题详述
(二)实现思路
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; }