/*
枚举等号的位置
分别求出两边的值所有的值
*/
#include <stdio.h>
#include <string.h>
#define N 17
long long ssum[N][N];
int len,ans,mid;
char str[N];
void rdfs(int i,long long sum,long long data)
{
if(i>len)
{
if(sum==data)
ans++;
return ;
}
for(int k=i;k<=len;k++)
rdfs(k+1,sum+ssum[i][k],data);
return ;
}
void ldfs(int i,long long data)
{
if(i>mid)rdfs(mid+1,0,data);
for(int k=i;k<=mid;k++)
ldfs(k+1,data+ssum[i][k]);
return ;
}
int main()
{
int i,j,k;
while(scanf("%s",str+1)!=EOF)
{
if(strcmp(str+1,"END")==0)
break;
memset(ssum,0,sizeof(ssum));
// printf("%s\n",str+1);
len= strlen(str+1);
//printf("(len)%d\n",len);
for(i=1;i<=len;i++)
{
for(j=i;j<=len;j++)
{
ssum[i][j]=0;
for(k=i;k<=j;k++)
{
ssum[i][j]=10*ssum[i][j]+(str[k]-'0');
}
}
}
// for(i=1;i<=len;i++)
// {
// for(j=i;j<=len;j++)
// printf("%d ",ssum[i][j]);
// printf("\n");
// }
ans=0;
for(mid=1;mid<len;mid++)
ldfs(1,0);
printf("%d\n",ans);
}
return 0;
}
hdu 4403
最新推荐文章于 2017-07-05 22:05:34 发布