E - Shredding Company
src="https://vjudge.net/problem/description/8036?1515692996000" width="100%" height="3136px" frameborder="0" scrolling="no" style="box-sizing: inherit;">
#include<stdio.h>
#include<string.h>
int a[100][100], m[100], ans[100], p[1000000], sum, count, count2, MAX, t, len;
void dfs(int cur, int len)
{
if(len==0)
{
if(sum==MAX)
p[MAX]++;
if(sum>MAX)
{
count2=count;
memcpy(ans,m,sizeof(int)*count);
MAX=sum;
}
return;
}
for(int i=cur;i<len+cur;i++)
if(sum+a[cur][i]<=t)
{
m[count++]=a[cur][i];
sum+=a[cur][i];
dfs(i+1,len-1-(i-cur));
sum-=a[cur][i];
count--;
}
}
int main()
{
int i,j;
char num[100];
while(~scanf("%d%s", &t, num))
{
memset(p, 0, sizeof(p));
count=0; sum=0; MAX=0;
len=strlen(num);
if(t==0 && len==1 && num[0]=='0')
break;
for(i=0;i<len;i++)
{
a[i][i]=num[i]-48;
for(j=i+1;j<len;j++)
a[i][j]=a[i][j-1]*10+num[j]-48;
}
dfs(0,len);
if(MAX==0)
printf("error\n");
else if(p[MAX]>=1)
printf("rejected\n");
else
{
printf("%d", MAX);
for(i=0;i<count2;i++)
printf(" %d", ans[i]);
printf("\n");
}
}
return 0;
}