33分求助,膜拜Orz
//
#include<bits/stdc++.h>
typedef long long LL;
typedef float F;
typedef double D;
using namespace std;
LL n;
LL sum;
LL text;
LL ans;
LL Mt;
LL s;
LL a[105];
LL b[105];
bool U[105];
bool cmp(LL a,LL b) {
if(a>b) return true;
return false;
}
void Input_ () {
cin>>n;
for(LL i=1;i<=n;i++) {cin>>a[i]; if(a[i]>50)continue; sum+=a[i];}
return ;
}
void Print_ () {
cout<<ans;
return ;
}
void Dfs(LL s,LL k,LL t) {
//for(LL i=1;i<=n;i++) printf("%lld ",b[i]);
//printf("\n");
if(k==sum/text) {ans=text;return ;}
if(t>n) ans=-1;
if(ans==0) {
if(s>n) return ;
if(a[s]<text-b[k]&&!U[s]) {
b[k]+=a[s];
U[s]=1;
Dfs(s+1,k,t+1);
b[k]-=a[s];
U[s]=0;
}
if(a[s]==text-b[k]&&!U[s]) {
b[k]+=a[s];
U[s]=1;
Dfs(0,k+1,t+1);
b[k]-=a[s];
U[s]=0;
}
// while(a[s]==a[s+1]) ss++;
Dfs(s+1,k,t+1);
if(sum-b[k]==a[s]||sum-b[k]==text) return;
}
}
void Work_ () {
Mt=sum*n;
sort(a+1,a+n+1,cmp);
for(LL i=a[1];i<=sum;i++) {
if(sum%i!=0) continue;
text=i;
Dfs(0,1,0);
if(ans==-1)ans=0;
if(ans!=0) break;
}
return ;
}
int main(int argc, char* argv[]) {
Input_();
Work_();
Print_();
return 0;
}
//:-)
//针·不戳
/*
9
5 2 1 5 2 1 5 2 1
6
*/
/*
*/