Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
大侠,帮忙啊!我怎么还是超时啊#include "iostream" using namespace std; int n,a[64],eq; int mark[64]; //////////////////////////////////////////// //优化方案: //(1)最大的要在下次中用掉。 //(2)同样的试过不行,下次就可以不用试了。 //////////////////////////////////////////// void search(int min,int level,int pos,int &flag) { if(level==n+1) { flag=1; return ; } if(!flag) { int i,last; for(i=pos;i>=0;i--) if(!mark[i]&&min>=a[i]&&last!=a[i]) { last=a[i]; mark[i]=1; int k=min-a[i]; if(k) search(k,level+1,i,flag); else search(eq,level+1,n-1,flag); mark[i]=0; } } } bool fit(int min) { int flag=0; eq=min; search(min,1,n-1,flag); if(flag) return true; else return false; } void sort() { int i,j; for(i=0;i<n;i++) for(j=0;j<n-i-1;j++) if(a[j]>a[j+1]) { int temp; temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } int main() { while(cin>>n) { if(!n) break; memset(a,0,sizeof(a)); memset(mark,0,sizeof(mark)); int i,min,sum=0; for(i=0;i<n;i++) { cin>>a[i]; sum+=a[i]; } sort(); min=a[n-1]; while(sum%min!=0||!fit(min)) min++; cout<<min<<endl; } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator