HDU 2546 - 饭卡

传送门

HDU 2546 - 饭卡

思路

如果一开始的钱不足五块钱,什么也买不了,直接输出。
如果多于五块,拿出五块买最贵的东西,剩下的能买多少买多少。

代码

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAXN = 1000 + 100;

int dp[MAXN], vage[MAXN];

int main()
{
    //freopen("input.txt", "r", stdin);
    int T, i, j, n, money;
    while (scanf("%d", &n), n)
    {
        memset(dp, 0, sizeof(dp)), j = 0;
        for (i = 0; i < n; i++)
            scanf("%d", &vage[i]);
        scanf("%d", &money);
        if (money < 5)
        {
            printf("%d\n", money);
            continue;
        }
        sort(vage, vage + n);
        money -= 5;
        int boss = vage[n - 1];
        for (i = 0; i < n - 1; i++)
            for (j = money; j > 0; j--)
                if (j - vage[i] >= 0)
                    dp[j] = max(dp[j], dp[j - vage[i]] + vage[i]);
        printf("%d\n", money - dp[money] + 5 - boss);
    }
    return 0;
}

Powered by Jekyll and Theme by solid