hdu 4403

来源:互联网 发布:淘宝达人如何挣钱 编辑:程序博客网 时间:2024/04/27 15:35
/*  枚举等号的位置  分别求出两边的值所有的值 */#include <stdio.h>#include <string.h>#define N 17long 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;    }

原创粉丝点击