The 37th ACM/ICPC Asia Regional JinHua Site Online Contest - D(爆搜)

来自ZZY的博客:http://blog.csdn.net/kk303/article/details/8008058

 

D - A very hard Aoshu problem

     数据范围很小呃... 暴力搜索即可...枚举等号的位置...再DFS得出左边的值..再DFS找右边有多少种方案可以等于左边的加法值...


Program:

[cpp] view plain copy print ?
  1. #include<iostream> 
  2. #include<stdio.h> 
  3. #include<algorithm> 
  4. #include<string.h> 
  5. #include<math.h> 
  6. #include<map> 
  7. #include<queue> 
  8. #include<stack> 
  9. #define ll long long 
  10. #define oo 1000000000 
  11. #define pi acos(-1) 
  12. using namespace std;  
  13. ll ans,T[20][20],len,mid; 
  14. char s[20]; 
  15. void dfs2(int i,ll data,ll pre) 
  16.      int k; 
  17.      if (i>len) 
  18.      { 
  19.           if (data==pre) ans++; 
  20.           return
  21.      } 
  22.      for (k=i;k<=len;k++) 
  23.           dfs2(k+1,data+T[i][k],pre); 
  24.      return
  25. void dfs1(int i,ll data) 
  26.      int k; 
  27.      if (i>mid) dfs2(mid+1,0,data); 
  28.      for (k=i;k<=mid;k++) 
  29.          dfs1(k+1,data+T[i][k]); 
  30.      return
  31. int main() 
  32. {  
  33.      int i,j,k; 
  34.      while (gets(s+1)) 
  35.      {  
  36.             if (s[1]=='E')break
  37.             len=strlen(s+1); 
  38.             for (i=1;i<=len;i++) 
  39.               for (j=i;j<=len;j++) 
  40.               { 
  41.                     T[i][j]=0; 
  42.                     for (k=i;k<=j;k++) T[i][j]=T[i][j]*10+s[k]-'0'
  43.               } 
  44.             ans=0; 
  45.             for (mid=1;mid<len;mid++) 
  46.                  dfs1(1,0); 
  47.             printf("%I64d\n",ans); 
  48.      } 
  49.      return 0; 

你可能感兴趣的:(The 37th ACM/ICPC Asia Regional JinHua Site Online Contest - D(爆搜))