HDU 5610 Baby Ming and Weight lifting

Problem Description

Baby Ming is fond of weight lifting. He has a barbell pole(the weight of which can be ignored) and two different kinds of barbell disks(the weight of which are respectively aa and bb), the amount of each one being infinite.

Baby Ming prepare to use this two kinds of barbell disks to make up a new one weighted CC(the barbell must be balanced), he want to know how to do it.

HDU 5610 Baby Ming and Weight lifting_第1张图片

Input

In the first line contains a single positive integer TT, indicating number of test case.

For each test case:

There are three positive integer a, ba,b, and CC.

1 \leq T \leq 1000, 0 < a, b, C \leq 1000, a \neq b1T1000,0<a,b,C1000,ab

Output

For each test case, if the barbell weighted CC can’t be made up, print Impossible.

Otherwise, print two numbers to indicating the numbers of aa and bb barbell disks are needed. (If there are more than one answer, print the answer with minimum a+ba+b)

Sample Input
2
1 2 6
1 4 5 
Sample Output
2 2

Impossible

简单枚举就可以了,我还傻乎乎的用了个背包。

#include<string>
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
#include<map>
#include<cmath>
using namespace std;
const int maxn = 1e5 + 10;
typedef long long LL;
int T, n, m;
int a, b, c, f[maxn];

int main()
{
    scanf("%d", &T);
    while (T--)
    {
        scanf("%d%d%d", &a, &b, &c);
        if ((c & 1) == 0)
        {
            c = c / 2;
            for (int i = 1; i <= c; i++) f[i] = -1;
            f[0] = 0;
            for (int i = 0; i <= c; i++)
            {
                if (f[i] >= 0)
                {
                    if (f[i + a] == -1) f[i + a] = f[i] + 1;
                    else f[i + a] = min(f[i + a], f[i] + 1);
                    if (f[i + b] == -1) f[i + b] = f[i] + 1;
                    else f[i + b] = min(f[i + b], f[i] + 1);
                }
            }
            if (f[c] >= 0) {
                for (int i = 0; i <= f[c]; i++)
                {
                    if (i*a + (f[c] - i)* b == c)
                    {
                        printf("%d %d\n", i*2, (f[c] - i)*2);    break;
                    }
                }
            }
            else printf("Impossible\n");
        }
        else printf("Impossible\n");
    }
    //while (scanf("%d", &n) != EOF){}
    return 0;
}


你可能感兴趣的:(HDU)