UVa 10130 - SuperSale
传送门
题意
一家N口人去买东西,求最大买的价值
思路
和其他的背包一样,加起来就可以了。一开始我以为东西只能买一次,折腾了好久(╯‵□′)╯ ┴─┴
代码
#include <cstdio>
#include <cstring>
using namespace std;
const int MAXN = 1000 + 100;
struct COMMODITY
{
int v, w;
}com[MAXN];
int dp[MAXN], weigh[110];
int main()
{
//freopen("input.txt", "r", stdin);
int T, i, j, n, num, k, ans;
scanf("%d", &T);
while (T--)
{
ans = 0;
scanf("%d", &n);
for (i = 0; i < n; i++)
scanf("%d%d", &com[i].v, &com[i].w);
scanf("%d", #);
for (i = 0; i < num; i++)
scanf("%d", &weigh[i]);
for (i = 0; i < num; i++)
{
memset(dp, 0, sizeof(dp));
for (j = 0; j < n; j++)
for (k = weigh[i]; k >= com[j].w; k--)
if (dp[k] < dp[k - com[j].w] + com[j].v)
dp[k] = dp[k - com[j].w] + com[j].v;
ans += dp[weigh[i]];
}
printf("%d\n", ans);
}
return 0;
}