题目大意:有N件商品,每件商品都有相应的质量和价格,然后有g个人,每个人都有最大的承受重量,要求求出在每个人的最大的承受范围所能购买的价格的最大值是多少
解题思路:01背包问题,二维的
#include<cstdio>
#include<cstring>
#define maxn 1005
int N,g,P[maxn],W[maxn],DP[maxn][maxn];
int main() {
int test;
scanf("%d", &test);
while(test--) {
scanf("%d", &N);
for(int i = 1; i <= N; i++)
scanf("%d%d",&P[i],&W[i]);
scanf("%d", &g);
int max = 0;
int sum;
int sum_ = 0;
for(int i = 1; i <= g; i++) {
scanf("%d",&sum);
memset(DP,0,sizeof(DP));
for(int j = 1; j <= N; j++)
for(int k = 0; k <= sum; k++) {
DP[j][k] = DP[j-1][k];
if(k >= W[j]) {
int temp = DP[j-1][k-W[j]] + P[j];
if(temp > DP[j][k])
DP[j][k] = temp;
}
}
sum_ += DP[N][sum];
}
printf("%d\n",sum_);
}
return 0;
}