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 |
搞定了,也是那个公示的问题:In Reply To:高手们给看看,为什么TLE了??? 谢谢!!! Posted by:zhb_msqx at 2007-08-20 19:55:26 #include <iostream> #include <fstream> using namespace std; int n[10]; int allnum[10000]; int mark[100]; int an; bool findn(int cur){ if(cur==0)return true; else{ for(int i=2;i<an;i++){ if(mark[i]==0&&allnum[i]<=cur){ mark[i]=1; int sum=cur-allnum[i]; if(findn(sum))return true; mark[i]=0; } } } return false; } bool compute(){ memset(allnum,0,sizeof(allnum)); an=1; int sum=0; for(int j=1;j<=6;j++){ for(int k=1;k<=n[j];k++){ allnum[an++]=j; sum+=j; } } if(sum%2==1)return false; int half=sum/2; memset(mark,0,sizeof(mark)); mark[1]=1; return findn(half-allnum[1]); } bool bk(){ for(int i=1;i<=6;i++){ if(n[i]!=0)return false; } return true; } void main(){ int testcase=1; while(1){ for(int i=1;i<=6;i++){ cin>>n[i]; } n[1]=n[1]%12;//数学公式. if(n[2]>4)n[2]=4-n[2]%2; if(n[3]>5)n[3]=4+n[3]%2; if(n[4]>5)n[4]=4+n[4]%2; if(n[5]>6)n[5]=6-n[5]%2; if(n[6]>5)n[6]=4+n[6]%2; if(bk())break; cout<<"Collection #"<<testcase++<<":"<<endl; if(compute())cout<<"Can be divided."<<endl; else cout<<"Can't be divided."<<endl; cout<<endl; } } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator