poj1416
#include<iostream> using namespace std; int target,datanum; int road[100],temproad[100]; int N,flag,maxsum; int data[100],datatemp[100]; int tail; void cun(int n) { tail=0; while(n/10) { int m=n%10; n=n/10; datatemp[tail++]=m; } datatemp[tail++]=n%10; for(int i=0;i<tail;i++) data[i]=datatemp[tail-i-1]; return; } void dfs(int n, int step, int sum, int tobe) { if(sum>target) return; if(n==N-1) { sum=sum+tobe*10+data[N-1]; temproad[step]=tobe*10+data[N-1]; if(sum>target) return; if(sum==maxsum) flag=1; else if(sum>maxsum) { for(int i=0;i<100;i++) road[i]=-1; flag=0; maxsum=sum; for(int i=0;i<=step;i++) road[i]=temproad[i]; } return; } temproad[step]=tobe*10+data[n]; dfs(n+1,step+1,sum+tobe*10+data[n],0);//切 temproad[step]=-1; dfs(n+1,step,sum,tobe*10+data[n]); } int main() { //freopen("input.txt","r",stdin); while(1) { cin>>target>>datanum; //cout<<target<<alldata<<endl; if(target==0&&datanum==0) break; if(target==datanum) { cout<<target<<' '<<target<<endl; continue; } for(int i=0;i<100;i++) data[i]=-1; cun(datanum); N=tail; maxsum=-1; flag=0; for(int i=0;i<100;i++) { road[i]=-1; temproad[i]=-1; } dfs(0,0,0,0); if(maxsum==-1) cout<<"error"<<endl; else if(flag==1) cout<<"rejected"<<endl; else { cout<<maxsum<<' '; for(int i=0;i<100;i++) { if(road[i]!=-1) cout<<road[i]<<' '; } cout<<endl; } } return 0; }