标签:
1 #include<iostream> 2 #include<queue> 3 #include<set> 4 #include<algorithm> 5 using namespace std; 6 int gcd(int a,int b){ 7 if(b==0)return a; 8 return gcd(b,a%b); 9 } 10 int N,a[20]; 11 bool isRight(){ 12 for(int i=1;i<N;i++){ 13 for(int j=i+1;j<=N;j++){ 14 int s=gcd(a[i],a[j]); 15 if(s!=a[i]&&s!=a[j]) return 1; 16 } 17 } 18 return 0; 19 } 20 set<long> dp; 21 bool canFind(long n){ 22 for(int i=1;i<=N;i++){ 23 if(n>=a[i]&&!dp.count(n-a[i])) { 24 return 0; 25 } 26 } 27 return 1; 28 } 29 int main(){ 30 cin>>N; 31 for(int i=1;i<=N;i++){ 32 cin>>a[i]; 33 } 34 if(!isRight()){ 35 cout<<"0"<<endl; 36 return 1; 37 } 38 sort(a+1,a+N+1); 39 queue<long> q; 40 41 for(int i=1;i<a[1];i++){ 42 dp.insert(i);q.push(i); 43 } 44 45 long ans=0; 46 while(!q.empty()){ 47 long top=q.front();q.pop(); 48 ans=max(top,ans); 49 for(int i=1;i<=N;i++){ 50 if(!dp.count(top+a[i])&&canFind(top+a[i])){ 51 dp.insert(top+a[i]); 52 q.push(top+a[i]); 53 } 54 } 55 } 56 cout<<ans<<endl; 57 return 0; 58 }
标签:
原文地址:http://www.cnblogs.com/yifan2016/p/5269944.html