货币系统

解题思路
依题意得,我们只需要舍去可以被其他数字表示出来的数即可。
code
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int T;
int n,maxn,ans;
int a[100010];
int f[100010];
int main()
{
cin>>T;
while(T--)
{
ans=maxn=0;
memset(f,0,sizeof(f));
cin>>n;
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
maxn=max(maxn,a[i]);
f[a[i]]=2;
}
sort(a+1,a+n+1);
for(int i=1;i<=maxn;i++)
if(f[i])
for(int j=1;j<=n;j++)
if(i+a[j]<=maxn)
f[i+a[j]]=1;
else
break;
for(int i=1;i<=maxn;i++)
if(f[i]==2)
ans++;
cout<<ans<<endl;
}
}
2510



被折叠的 条评论
为什么被折叠?



