NOIP2018 DAY1T2 貨幣系統(揹包?)
阿新 • • 發佈:2019-02-09
傳送門
【題目分析】
唉,三年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; } }