P5020 [NOIP2018 提高组] 货币系统

Problem

自行阅读P5020 货币系统

Solution

不难发现就是去掉可以用别的货币表示的货币。

# include <bits/stdc++.h>
using namespace std;
const int N = 105;
int T;
int n,a[N];
int can[25005];
int main(void)
{
    scanf("%d",&T);
    while(T--)  
    {
        scanf("%d",&n);
        for(int i = 1; i <= n; i++)
        {
            scanf("%d",&a[i]);
            can[a[i]] = 1;
        }
        int m = 0;
        for(int i = 1; i <= n; i++) m = max(m,a[i]);
        for(int i = 1; i <= m; i++)
        {
            if(can[i])
            {
                for(int j = 1; j <= n; j++) if(i + a[j] <= m) can[i + a[j]] = 2;
            }
        }
        int total = 0;
        for(int i = 1; i <= n; i++) if(can[a[i]] == 2) ++total;
        printf("%d\n",n - total);
        for(int i = 1; i <= m; i++) can[i] = 0;
    }
    return 0;
}
上一篇:【题解】P5018 [NOIP2018 普及组] 对称二叉树


下一篇:【解题报告】NOIP2018