Source Code
Problem: 1011 | User: cug_fish2008 | |
Memory: 280K | Time: 47MS | |
Language: C++ | Result: Accepted |
- Source Code
#include <iostream> using namespace std; int p[65]; int n,width,count; bool c[65]; bool find(int len,int k) { if(len==width && k==n)return true; if(len==width)len=0; for(int i=0;i<n;i++){ if(c[i])continue; if(len+p[i]>width)continue; c[i]=true; if(find(len+p[i],k+1)) return true; c[i]=false; if(len+p[i]==width || len==0) break; } return false; } int cmp(const void *a,const void *b) { return *(int*)b-*(int*)a; } void Onit() { memset(c,false,n); qsort(p,n,sizeof(int),cmp); } int main() { while(scanf("%d",&n),n!=0){ int sum=0,maxs=-1; for(int i=0;i<n;i++){ scanf("%d",&p[i]); sum+=p[i]; if(maxs<p[i])maxs=p[i]; } Onit(); for(int i=maxs;i<=sum;i++){ if(sum%i)continue; width=i; count=sum/i; if(find(0,0)){ cout<<width<<endl; break; } } } return 0; }