自己怎么就那么的2呢?题目都读错了。。
简单背包,每个人都可以从这些类型的物品里取一个,求这些人能够取出的最大值。
当初看成每种类型的物品只有一个,这些人一共能取出的最大值。杯具~
#include <stdio.h>
#include <string.h>
#define N 1005
#define W 35
int p[N], w[N], c[W];
int main()
{
int t, n, g, gw, sum;
scanf("%d", &t);
while(t--)
{
scanf("%d", &n);
for(int i = 1; i <= n; i++)
scanf("%d %d", &p[i], &w[i]);
scanf("%d", &g);
memset(c, 0, sizeof(c));
for(int i = n; i; i--)
for(int j = 30; j >= w[i]; j--)
{
if(c[j] < c[j - w[i]] + p[i])
{
c[j] = c[j - w[i]] + p[i];
}
}
sum = 0;
for(int k = 1; k <= g; k++)
{
scanf("%d", &gw);
sum += c[gw];
}
printf("%d\n", sum);
}
return 0;
}