NOIP2018 DAY1T2 货币系统(背包?)
传送门
【题目分析】
唉,三年OI一场空,不刷原题见祖宗。。。qwq
拿着AK巨佬dzy所说的完全背包搞了半天感觉写了个假的。。。。过了氵谷的数据。。。
其实还是很明显,如果一个数可以被其他数表示,那么可以不用。
【代码~】
#include<bits/stdc++.h>
using namespace std;
const int MAXN=3e4+10;
const int MAXM=110;
int T;
int n;
int a[MAXM];
int vis[MAXN];
int Read(){
int i=0,f=1;
char c;
for(c=getchar();(c>'9'||c<'0')&&c!='-';c=getchar());
if(c=='-')
f=-1,c=getchar();
for(;c>='0'&&c<='9';c=getchar())
i=(i<<3)+(i<<1)+c-'0';
return i*f;
}
int main(){
T=Read();
while(T--){
memset(vis,0,sizeof(vis));
n=Read();
for(int i=1;i<=n;++i)
a[i]=Read();
vis[0]=1;
sort(a+1,a+n+1);
int cnt=0;
for(int i=1;i<=n;++i){
if(vis[a[i]])
continue;
for(int j=0;j+a[i]<MAXN;j++){
if(vis[j])
vis[j+a[i]]=1;
}
cnt++;
}
cout<<cnt<<endl;
}
}