#include<cstdio>
#include<string>
#include<iostream>
#include<algorithm>
using namespace std;
int sum;
int n;
bool f[65]={0};
int map[65];
bool flag;
int parts;
int len;
void DFS(int pos,int cur,int total)//0ms
{
if(flag==1) //Óнâ
return ;
if(cur==len){ //Âú×㳤¶ÈµÄ×éºÏ
total++;
if(total==parts)
flag=1;
DFS(0,0,total);//´ÓʣϵĹ÷×ÓÖмÌÐøÑ¡È¡Ïà¼Ó³¤¶ÈΪlenµÄ×éºÏ
return ;
}
int pre=-1;
for(int i=pos;i<n;i++){
if(f[i]==0&&map[i]!=pre&&cur+map[i]<=len){
pre=map[i];
f[i]=1;
DFS(i+1,cur+map[i],total);
f[i]=0;
if(flag==1||pos==0)
return ;
}
}
}
bool cmp(int a,int b)
{
return a>b;
}
int main()
{
while(scanf("%d",&n),n)
{
sum=0;
int i;
flag=0;
for(i=0;i<n;i++)
{
int t;
scanf("%d",&t);
f[i]=false;
sum+=t;
map[i]=t;
}
sort(map,map+n,cmp);
int cnt=0;
for(i=map[0];i<=sum;i++)
{
if(sum%i==0)
{
len=i;
parts=sum/i;
DFS(0,0,0);
if(flag)
{printf("%d\n",i);
break;
}
}
}
}
return 0;
}
hdu1455
最新推荐文章于 2020-03-05 15:37:09 发布