思路
这道题我们不用DP,用货币筛(雾
我们把不能被表示的货币,直接放到货币系统里,然后和其他已经在货币系统里的货币或能被表示的货币一起去筛其他货币。
代码
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int T,n,a[100010],f[100010];
int ans,maxx;
int main()
{
cin>>T;
while(T--)
{
cin>>n;
ans=0;
for(int i=1; i<=n; i++)
{
scanf("%d",&a[i]);
maxx=max(maxx,a[i]);
}
sort(a+1,a+1+n);
for(int i=1; i<=n; i++)
{
if(f[a[i]]==0)
ans++,f[a[i]]=1;
for(int j=1; j<=maxx-a[i]; j++)
if(f[j])
f[j+a[i]]=1;
}
printf("%d\n",ans);
memset(f,0,sizeof(f));
}
return 0;
}