//凑面值问题 #include<bits/stdc++.h> #define int long long using namespace std; int n,res; int a[20]; bool f[100000010]; int gcd(int a,int b) { if(b==0) return a; return gcd(b,a%b); } signed main() { cin>>n; for(int i=1;i<=n;i++) { scanf("%lld",&a[i]); if(i>1) res=gcd(res,a[i]); else res=a[i]; } if(res>1)//不能买到的数目没有上界 { cout<<0; return 0; } f[0]=1; for(int i=1;i<=n;i++) { for(int j=a[i];j<=1e8/n;j++) { f[j]|=f[j-a[i]]; } } for(int i=1e8/n;i>=1;i--) { if(!f[i]) { cout<<i; return 0; } } cout<<0;//都能买到 return 0; }
标签:return,cout,int,res,long,问题,面值,gcd From: https://www.cnblogs.com/wqy2003/p/16909831.html