#include<cstdio>
#include<algorithm>
#include<functional>
#include<cstring>
#include<iostream>
using namespace std;
const int maxn=70;
int len,used[maxn],s[maxn],n;
bool dfs(int i,int l,int r){
if(l==0){
if(!(--r)) return 1;
for(i=0;used[i];++i);
used[i]=1;
if(dfs(i+1,len-s[i],r)) return 1;
++r;used[i]=0;
}
else{
for(int j=i;j<n;++j){
if(j&&s[j]==s[j-1]&&!used[j-1]) continue;
if(!used[j]&&s[j]<=l){
used[j]=1;
if(dfs(j+1,l-s[j],r)) return 1;
used[j]=0;
if(s[j]==l) break;
}
}
}
return 0;
}
int main(){
while(scanf("%d",&n)==1&&n){
int sum=0;
memset(used,0,sizeof(used));
for(int i=0;i<n;++i){
scanf("%d",&s[i]);
sum+=s[i];
}
sort(s,s+n,greater<int>());
bool flag=0;
for(len=s[0];len<=sum/2;++len){
if((sum%len)!=0) continue;
if(dfs(0,len,sum/len)) {
flag=1;
printf("%d\n",len);
break;
}
}
if(!flag) printf("%d\n",sum);
}
return 0;
}
poj 1011
最新推荐文章于 2022-06-22 21:34:00 发布