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 |
请大牛指正,我相信代码没错,但就整WA#include<iostream> #include<fstream> using namespace std; int max_=0; int *a; bool *flag; int *ans; int best=0; void solve(int n,int idx); void input() { int m; fstream in; in.open("test.txt"); while(in>>max_)/**/ //while(cin>>max_) { in>>m;//c if(m==0 && max_==0) { break; } if(m == max_) { cout<<m<<" "<<max_<<endl; continue; } int tmp[25]; int cnt = 0; while(m>0) { int i = m%10; tmp[cnt++] = i; m = m/10; } a = new int[cnt]; for(int k=cnt-1; k>=0; k--) { a[cnt-k-1] = tmp[k]; } ans = new int[cnt]; memset(ans, -1, sizeof(int)*cnt); flag = new bool[cnt]; memset(flag, false, sizeof(bool)*cnt); best = 0; solve(cnt, 0); if(best == 0) cout<<"error"<<endl; else if(best==-1) cout<<"rejected"<<endl; else { cout<<best<<" "; int i = 0; for(; i<cnt; i++) { if(ans[i]<0) break; cout<<ans[i]; if(i+1<cnt && ans[i+1]>=0) cout<<" "; }/**/ cout<<endl; } delete a; delete flag; delete ans; } } void solve(int n,int idx) {//int kk=0;for(;kk<n;kk++)if(flag[kk])cout<<a[kk]<<" ";else cout<<a[kk]<<","; int j=0; int m=0; int tsum=0; int sum = 0; int *tmp = new int[n]; int cnt=0; for(; j<n; j++) { if(flag[j] == false) { tmp[cnt++] = a[j]+m; tsum += a[j]+m; m=0; } else { m += a[j]; m *=10; } if(tsum > max_) { break; } } if(m>0) { m /= 10; tmp[cnt] = m; } sum = tsum + m; //cout<<"="<<sum<<endl; if(j==n && sum>best && sum<=max_ && best>=0) { memcpy(ans,tmp,sizeof(int)*n); best = sum; } else if(sum==best && best>0) { best = -1; return; } int i = idx; for(; i<n-1; i++) { if(flag[i] == false) { flag[i] = true; solve(n,i+1); flag[i] = false; } } } int main() { input(); return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator