#include<bits/stdc++.h>
using namespace std;
// #define fileio
#define IOS
void ___()
{
#ifdef fileio
freopen(".in","r",stdin);
freopen(".out","w",stdout);
#endif
#ifdef IOS
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
#define endl '\n'
#endif
}
#define ll long long
const int _mxn=65+5;
int n,a[_mxn];
int len,cnt;
bool vis[_mxn];
bool dfs(int dep,int l,int t)
{
if(dep>cnt)
return true;
if(l==len)
return dfs(dep+1,0,1);
int f=0;
for(int i=t;i<=n;i++)
{
if(!vis[i]&&l+a[i]<=len&&f!=a[i])
{
vis[i]=true;
if(dfs(dep,l+a[i],i+1))
return true;
f=a[i];
vis[i]=false;
if(l==0||l+a[i]==len)
return false;
}
}
return false;
}
int main()
{
___();
cin>>n;
int mx=0,s=0;
for(int i=1;i<=n;i++)
{
cin>>a[i];
if(a[i]>50)
{
n--,i--;
continue;
}
mx=max(mx,a[i]),s+=a[i];
}
sort(a+1,a+n+1,greater<int>());
for(len=mx;len<=s;len++)
{
if(s%len)
continue;
cnt=s/len;
if(dfs(1,0,1))
{
cout<<len<<endl;
break;
}
}
return 0;
}
最后一个点差 2ms,剪枝能加的基本上都加了,O2 也开了