POJ 1011 Sticks

来源:互联网 发布:数据分层法 编辑:程序博客网 时间:2024/06/10 13:27
#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;}

原创粉丝点击