#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int a[65],vis[65],n;
int dfs(int len,int li,int s,int num)
{
int sam=-1,i;
if(num==n) return 1;
for(i=s;i>=0;i--)
{
if(vis[i] || a[i]==sam) continue;
vis[i]=1;
if(len+a[i]<li)
{
if(dfs(len+a[i],li,i,num+1)) return 1;
else sam=a[i];
}
else if(len+a[i]==li)
{
if(dfs(0,li,n-1,num+1)) return 1;
else sam=a[i];
}
vis[i]=0;
if(len==0) break;
}
return 0;
}
int main()
{
int i,sum,ok,min;
while(cin>>n && n)
{
sum=0;
for(i=0;i<n;i++)
{
cin>>a[i];
sum+=a[i];
vis[i]=0;
}
sort(a,a+n);
min=a[n-1];ok=0;
for(i=min;i<=sum-i;i++) if(sum%i==0)
{
if(dfs(0,i,n-1,0))
{
cout<<i<<endl;ok=1;break;
}
}
if(!ok) cout<<sum<<endl;
}
return 0;
}
POJ 1011 Sticks
最新推荐文章于 2017-09-27 17:56:51 发布