1 solutions
-
-1
#include<bits/stdc++.h> using namespace std; const int N=110,M=10010; int f[M]; int a[N]; int gcd(int a,int b) //最大公约数模板 { if(b==0) return a; return gcd(b,a%b); } int main() { int n; cin>>n; int d=0; for(int i=1;i<=n;i++) //求n个数的最大公约数 { cin>>a[i]; d=gcd(d,a[i]); } if(d!=1) cout<<"INF"; //凑出来的都是d的倍数 else { f[0]=1; for(int i=1;i<=n;i++) //完全背包 { for(int j=a[i];j<M;j++) { f[j]=f[j]|f[j-a[i]]; } } int res=0; for(int i=0;i<M;i++) //从小到大找到第一个凑不出来的 { if(!f[i]) { res++; } } cout<<res; } return 0; }
- 1
Information
- ID
- 1441
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 5
- Tags
- (None)
- # Submissions
- 5
- Accepted
- 2
- Uploaded By