39分求调
#include<bits/stdc++.h>
using namespace std;
int n,a[100],b[100],ma,s,flag,i;
bool cmp(int x,int y){
return x>y;
}
void dfs(int k,int last,int rest){
if(k==s/i){
flag=1;return;
}
if(!rest){
int j;
for(j=2;j<=n;j++){
if(!b[i])break;
}
b[j]=1;
dfs(k+1,j,i-a[j]);
b[i]=0;
if(flag)return;
}
for(int j=last+1;j<=n;j++){
if(!b[j]&&rest>=a[j]){
b[j]=1;
dfs(k+1,j,rest-a[j]);
b[j]=0;
int k=j;
while(j<n&&a[k]==a[j])j++;
}
}
}
int main() {
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];s+=a[i],ma=max(ma,a[i]);
}sort(a+1,a+n+1,cmp);
for(i=a[1];i<=s;i++){
if(s%i==0){
dfs(1,1,i-a[i]);
if(flag){
cout<<i;break;
}
}
}
return 0;
}