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 |
Re:谁能给些易错的数据呀!多谢了!!----以下是小弟的代码,欢迎来参考:In Reply To:谁能给些易错的数据呀!多谢了!!----以下是小弟的代码,欢迎来参考: Posted by:xuguangshengqq at 2007-01-10 17:16:11 > #include <iostream.h> > #include <stdlib.h> > #include <memory.h> > #define maxn 70 > bool used[maxn]; > int p[maxn]; > int len,n,count = 0; > > int compare(const void *a,const void *b){ > return (*(int *)a)-(*(int *)b); > } > > bool f1(int k); > bool f2(int kk,int pos,int left); > > void main(){ > int i = 0; > int sum = 0; > while(cin>>n&&n){ > sum = 0; > for(i = 1;i<=n;i++){ > cin>>p[i]; > sum+= *(p+i); > } > qsort(p+1,n,sizeof(int),compare); > //for(i = 1;i<=n;i++){ > // cout<<p[i]<<" "; > //}cout<<endl; > len = p[n]; > for(;len<=sum;len++){ > if(sum%len)continue; > memset(used,false,maxn); > count = sum/len; > if(f1(1))break; > } > if(len>sum)cout<<sum<<endl; > else cout<<len<<endl; > > } > > > } > > > bool f1(int k){ > // cout<<"f1 = "<<k<<endl; > if(k==count) > { > //cout<<" len = "<<len<<" 搜索成功!!\n"; > return true; > } > else > { > int i = 0; > for(i=n;i>=1;i--){ > if(!used[i])break; > } > used[i] = 1; > if(f2(k,i,len-p[i])){f1(k+1);return true;} > else > {//cout<<" len = "<<len<<" 搜索失败!!\n"; > return false; > } > } > } > > bool f2(int kk,int pos,int left) > { //cout<<"f2: kk = "<<kk<<", pos = "<<pos<<", left = "<<left<<endl; > if(left == 0) > { > if(f1(kk+1))return true; > } > > else if(pos<=1){return false;} > > else{ > int i = 0; > for(i = pos-1;i>=1;i--){ > if(!used[i]&&p[i]<=left) > { > used[i] = true; > if(f2(kk,i,left-p[i])) return true; > else{ > used[i] = false; > while((i-1)&&p[i-1]==p[i])i--; > } > } > } > return false; > } > } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator