P5020 货币系统
https://www.luogu.com.cn/problem/P5020
题意
- 一个国家的货币面值的集合A
- 求能够表示集合中所有面值的集合B
- 输出集合B中最小个数
想法
如果一种货币可以被其他货币表示,那么这个货币就可以别剔除
#include<bits/stdc++.h>
using namespace std;
int n;
int a[105];
int f[25005];
int main()
{
int T;
cin>>T;
while(T--)
{
cin>>n;
memset(f,0,sizeof(f));
int ans=0;
int maxV = 0;
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
maxV = max(a[i],maxV);
}
sort(a+1,a+n+1);
for(int i=1;i<=n;i++)
if(!f[a[i]])
{
f[a[i]]=1;
ans++;
for(int j=a[i];j<=maxV;j++)
f[j]=f[j]|f[j-a[i]];
}
cout<<ans<<endl;
}
return 0;
}