10分求助
查看原帖
10分求助
529247
Br00k5xx楼主2021/9/7 16:43
#include <cstdio>
#include <algorithm>
using std::max;
int f[10005], k[10005], m[10005], in[10005][10005];
char c;
void read(int &x)
{
    x = 0;
    while ((c = getchar()) != EOF)
    {
        if (c == ' ' || c == '\n') return ;
        x = (x << 1) + (x << 3) + (c ^ 48);
    }
    return ;
}
int main()
{
    int v, n, c;
    long long sum = 0;
    read(v);
    read(n);
    read(c);
    for (int i = 1; i <= n; i++)
    {
        read(k[i]);
        read(m[i]);
        sum += k[i];
    }
    if (sum < v)
    {
        printf("Impossible");
        return 0;
    }
    for (int i = 1; i <= n; i++)
        for (int j = c; j >= m[i]; j--)
            f[j] = max(f[j], f[j - m[i]] + k[i]);
    for(int i = 0; i <= c; i++)
    {
        if(f[i] >= v)
        {
            printf("%d", c - i);
            return 0;
        }
    }
    printf("Impossible");
    return 0;
}
2021/9/7 16:43
加载中...