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; }