1 solutions
-
0
#include<bits/stdc++.h> using namespace std; const int N=110,M=25010; int f[M]; int v[N]; int main() { int z; cin>>z; while(z--) { memset(f,0,sizeof f); //清空之前的状态 memset(v,0,sizeof v); int n; cin>>n; for(int i=1;i<=n;i++) //获取每种货币 { cin>>v[i]; } sort(v+1,v+1+n); //从小到大排序 int V=v[n]; //最大的货币 int res=0; f[0]=1; //初始化 for(int i=1;i<=n;i++) { if(f[v[i]]) continue; //可以被凑出来 res++; //选了当前种 for(int j=v[i];j<=V;j++) //枚举比当前货币大的所有货币 { f[j]=max(f[j],f[j-v[i]]); //更新标记 } } cout<<res<<endl; } return 0; }
- 1
Information
- ID
- 991
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 5
- Tags
- (None)
- # Submissions
- 8
- Accepted
- 5
- Uploaded By