货币系统

货币系统

https://ac.nowcoder.com/acm/problem/21228

读完题目之后,内心一片祥和,除了想口吐芬芳........
题意:给定n个数,然后问最后剩余多少个数的时候,还可以把原来的数全部表示出来
举个例子:3 10 19 ,最后剩下2个数3和10即可,因为19=3+3+3+10
题解看一波范围,额,有点小.....最多才图片说明
那还想啥,直接暴力
比如3 可以构成3 6 9 12 15......
然后10可以构成10 20 30 40......
然后3和10结合可以构成13 16 19 22 25.....23 26 29 32 35......33.....
然后19,可以由前面比较小的两个数构成,n--
先排下序,然后对于然后判断当前数字是否可以由比他小的前面的数构成,如果当前的数在输入的n个数中,且可以由比其小的数构成n--

#include<bits/stdc++.h>
using namespace std;
int n,a[101],ans;
bool f[25001];
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        memset(f,0,sizeof(f));
        scanf("%d",&n);
        ans=n;
        for(int i=1;i<=n;i++)scanf("%d",&a[i]);
        sort(a+1,a+n+1);
        f[0]=1;
        for(int i=1;i<=n;i++)
        {
            if(f[a[i]]){ans--;continue;}
            for(int j=a[i];j<=a[n];j++)f[j]|=f[j-a[i]];
        }
        printf("%d\n",ans);
    }
}
全部评论

相关推荐

10-11 15:42
皖西学院 Java
青鱼LINK:我硕士,也是java0面试,吾道不孤
点赞 评论 收藏
分享
10-05 23:02
东北大学 Java
我说句实话啊:那时候看三个月培训班视频,随便做个项目背点八股,都能说3 40w是侮辱价
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务