商品无限,01的背包问题,有多个人,分成不同的人求和,之间没有关联
j是从0---V还是从V----0
这个是0-1背包和无限背包问题的关键不同所在
#include <iostream>
#include <vector>
#include <map>
#include <list>
#include <set>
#include <deque>
#include <stack>
#include <queue>
#include <algorithm>
#include <cmath>
#include <cctype>
#include <cstdio>
#include <iomanip>
#include <cmath>
#include <cstdio>
#include <iostream>
#include <string>
#include <sstream>
#include <cstring>
#include <queue>
using namespace std;
///宏定义
const int INF = 20000000;
const int maxn = 1050;
const double PI = acos(-1.0);
///全局变量 和 函数
//
int T;
int f[maxn];
int n;
int price[maxn];
int weight[maxn];
int persons;
int ans;
int main()
{
//
int i, j, k;
cin >> T;
while (T--)
{
cin >> n;
for (i = 1; i <= n; i++)
{
cin >> price[i] >> weight[i];
}
cin >> persons;
ans = 0;
for (i = 1; i <= persons; i++)
{
int v;
cin >> v;
memset(f, 0, sizeof(f));
//k种物品
for (k = 1; k <= n; k++)
{
for (j = v; j >= 0; j--)
{
if (j >= weight[k])
{
f[j] = max(f[j], f[j - weight[k]] + price[k]);
}
}
}
ans += f[v];
}
cout << ans << endl;
}
return 0;
}