# include<stdio.h>
# include<string.h>
# include<algorithm>
using namespace std;
int n,stick[70],vis[70];
int dfs(int cur,int remain,int orgin,int len);
bool cmp(int a,int b){return a>b;}
int main()
{
while(scanf("%d",&n)!=EOF)
{
if(!n) break;
int sum=0;
for(int i=0;i<n;i++)
{
scanf("%d",&stick[i]);
sum+=stick[i];
}
sort(stick,stick+n,cmp);
for(int i=stick[n-1];i<=sum;i++)
{
if(sum%i) continue;
memset(vis,0,sizeof(vis));
vis[0]=1;
if(dfs(0,i-stick[0],0,i))
{
printf("%d\n",i);
break;
}
}
}
return 0;
}
int dfs(int cur,int remain,int orgin,int len)
{
if(remain==0)
{
int i;
for(i=orgin+1;i<n;i++)
{
if(vis[i]) continue;
vis[i]=1;
if(dfs(i,len-stick[i],i,len)) return 1;
vis[i]=0;
return 0;
}
if(i==n) return 1;
}
int save=-1;
for(int i=cur+1;i<n;i++)
{
if(stick[i]==save||vis[i]) continue;
vis[i]=1;
if(remain-stick[i]>=0&&dfs(i,remain-stick[i],orgin,len)) return 1;
vis[i]=0;
save=stick[i];
}
return 0;
}
307 - Sticks
最新推荐文章于 2022-02-25 19:38:17 发布