题意:有N个人,每个人需要选择一些物品,要求求出团队整个价值的最大值
解析:对每个人进行01背包搜寻最优解,他们的和,就是集体最优解
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1005;
int v[N],w[N]; //v代表体积,w代表重量
int dp[50];
int main() {
int T,n,m,V;
scanf("%d",&T);
while(T--) {
scanf("%d",&n);
for(int i = 0; i < n; i++) {
scanf("%d%d",&w[i],&v[i]);
}
int sum = 0;
scanf("%d",&m);
for(int k = 0; k < m; k++) {
scanf("%d",&V);
memset(dp,0,sizeof(dp));
for(int i = 0; i < n; i++) {
for(int j = V; j >= v[i]; j--) {
dp[j] = max(dp[j],dp[j-v[i]] + w[i]);
}
}
sum += dp[V];
}
printf("%d\n",sum);
}
return 0;
}