UVa 10130 - SuperSale

传送门

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;
}

Powered by Jekyll and Theme by solid