1.题目

2.代码
#include <bits/stdc++.h>
using namespace std;
const int MAXN=70;
int sum,leg,n;
bool vis[MAXN]={false};
int l[MAXN];
bool cmp(int a,int b)
{
return a>b;
}
bool dfs(int num,int suml,int start)
{
if(num*leg==sum) return true;
if(suml==leg) return dfs(num+1,0,0);
if(suml>leg) return false;
for(int i=start;i<n;i++)
{
if(!vis[i])
{
vis[i]=true;
if(dfs(num,suml+l[i],i+1)) return true;
vis[i]=false;
if(suml==0||suml+l[i]==leg) return false;
int j=i+1;
while(j<n&&l[j]==l[i]) j++;
i=j-1;
}
}
return false;
}
int main()
{
while(scanf("%d",&n))
{
if(n==0) break;
memset(vis,false,sizeof(vis));
sum=0;
for(int i=0;i<n;i++)
{
scanf("%d",&l[i]);
sum+=l[i];
}
sort(l,l+n,cmp);
leg=l[0];
while(true)
{
if(sum%leg==0&&dfs(1,0,0))
{
break;
}
leg++;
}
printf("%d\n",leg);
}
}