洛谷 NOIP AT3880 Coins 题解

题目

有一个坑,题目下方事例,数量为0的就没有输出。我以为为0的就不用输出,特意加了判断。结果有4道题WA,去掉了那个判断才AC/


### 翻译如下
你有500日元硬币A枚、100日元硬币B枚、50日元硬币 C枚。 现在,从这些硬币中挑出数枚硬币,各个硬币价格之和刚好等于X日元的组合有多少种。 需要注意的是:
1. 同种类(面值)的硬币是没有区别的
2. 不同的组合方式以某个面值的硬币数量不同来区分
3. 0 ≤ A, B, C ≤ 50
4. A + B + C ≥ 1
5. 50 ≤ X ≤ 20,000
6. A, B, C 一定是整数

7. X 一定是50的倍数

输入格式
A枚500日元硬币
B枚100日元硬币
C枚50日元硬币
组合价值之和等于X元

输出格式
组合的方式个数

### 题解
其实题看懂了,就好做了

需要注意的是,不要N^2了,分分钟超时。后面要加个判断,当前循环已经超了就不用继续模拟了。这样可以减到N²/2
#include <stdio.h>

int main ()
{
    int a, b, c, x, i, j, k, cnt=0;
    scanf("%d%d%d%d", &a, &b, &c, &x);
    for (i=0; i <= a && 500*i<=x; i++)
    {
        for (j=0; j <= b && 100*j+500*i<=x; j++)
        {
            for (k=0; k <= c && 50*k+100*j+500*i<=x; k++)
            {
                if (500*i+100*j+50*k==x)
                {
                    cnt++;
                }
            }
        }
    }

    printf("%d", cnt);

    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_23937195/article/details/79662908
今日推荐