//搜索入门 #include <stdio.h> #include <algorithm> using namespace std; int length,a[64],n,sum; bool ok,v[64]={0}; void dfs(int i,int size,int step){ if(size==length)i=0,size=0,step--; if(step==0)ok=1; for(int old=-1;!ok&&i<n;i++) if(!v[i]&&a[i]!=old&&(size+a[i])<=length){ v[i]=1; old=a[i]; dfs(i+1,size+a[i],step); v[i]=0; if(size==0)return; } } bool cmp(int x,int y){return x>y;} int main(){ while(scanf("%d",&n),n){ sum=0,ok=0; for(int i=0;i<n;i++){scanf("%d",&a[i]);sum+=a[i];} sort(a,a+n,cmp); for(length=a[0];!ok&&length<=sum;length++) if(sum%length==0){ dfs(0,0,(sum/length)-1); if(ok)printf("%d\n",length); } } return 0; }
|