题目链接:http://poj.org/problem?id=1416
【分析】
水题不多说......直接暴力。
【代码】
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int a[8],v[8][8];
int n,target,num;
int d[8],fnd[8],fp;
int ans,anstime;
void Init()
{
n=0;
while (num) a[++n]=num%10,num/=10;
for (int i=1;i<=n/2;i++) swap(a[i],a[n-i+1]);
for (int i=1;i<=n;i++)
for (int j=i;j<=n;j++)
v[i][j]=v[i][j-1]*10+a[j];
ans=anstime=0;
memset(d,0,sizeof(d));
}
void DFS(int x,int p,int res)
{
if (x==n+1)
{
if (res>ans) {ans=res;anstime=1;for (int i=1;i<=p-1;i++) fnd[i]=d[i];fp=p-1;}
else if (res==ans) anstime++;
return;
}
for (int i=x;i<=n && res+v[x][i]<=target;i++) d[p]=i,DFS(i+1,p+1,res+v[x][i]);
}
void Print()
{
if (ans==0) printf("error\n");
else if (anstime>1) printf("rejected\n");
else
{
printf("%d ",ans);
for (int i=1;i<fp;i++) printf("%d ",v[fnd[i-1]+1][fnd[i]]);
printf("%d\n",v[fnd[fp-1]+1][fnd[fp]]);
}
}
int main()
{
while (scanf("%d%d",&target,&num) && target && num)
{
Init();
DFS(1,1,0);
Print();
}
}