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:

  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; 
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<math.h>
#include<map>
#include<queue>
#include<stack>
#define ll long long
#define oo 1000000000
#define pi acos(-1)
using namespace std; 
ll ans,T[20][20],len,mid;
char s[20];
void dfs2(int i,ll data,ll pre)
{
     int k;
     if (i>len)
     {
          if (data==pre) ans++;
          return ;
     }
     for (k=i;k<=len;k++)
          dfs2(k+1,data+T[i][k],pre);
     return;
}
void dfs1(int i,ll data)
{
     int k;
     if (i>mid) dfs2(mid+1,0,data);
     for (k=i;k<=mid;k++)
         dfs1(k+1,data+T[i][k]);
     return;
}
int main()
{ 
     int i,j,k;
     while (gets(s+1))
     { 
            if (s[1]=='E') break;
            len=strlen(s+1);
            for (i=1;i<=len;i++)
              for (j=i;j<=len;j++)
              {
                    T[i][j]=0;
                    for (k=i;k<=j;k++) T[i][j]=T[i][j]*10+s[k]-'0';
              }
            ans=0;
            for (mid=1;mid<len;mid++)
                 dfs1(1,0);
            printf("%I64d\n",ans);
     }
     return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值