```
#include<bits/stdc++.h>
using namespace std;
const int N=70;
int a[N],cnt,maxs,len,sum,n;
bool st[N];
bool dfs(int now,int nowl)//now:当前拼第几根长木棒 //nowl:当前木棒已经拼接的长度
{
if(now>cnt) return true;//cnt个长木棒全部拼好,说明该长度可行,彻底完成
if(nowl==len) return dfs(now+1,0);//已拼一根长为len的长木棒,尝试拼下一根
for(int i=1;i<=n;i++)//(做选择)枚举所有短木棍
if(!st[i]&&nowl+a[i]<=len)
{
st[i]=1;
if(dfs(now,nowl+a[i])) return true;
st[i]=0;
}
return false;
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
if(a[i]>50)
{
i--;n--;continue;
}
maxs=max(maxs,a[i]);
sum+=a[i];
}
for(int i=maxs;i<=sum;i++)
{
if(sum%i) continue;
cnt=sum/i;
len=i;
memset(st,0,sizeof(st));
if(dfs(1,0)) break;
}
printf("%d\n",len);
return 0;
}
```