hdu 4403 简单搜索

思路:分等号左边和右边进行搜索

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define LL __int64
using namespace std;
char str[20];
int n,ans;
void right(LL sum,LL now,int cnt)
{
    if(cnt==n)
    {
        if(sum==now)
            ans++;
        return ;
    }
    if(sum==0)
        return ;
    if(sum>=now*10+(LL)(str[cnt]-'0'))
        right(sum,now*10+(LL)(str[cnt]-'0'),cnt+1);
    if(sum>=now)
    right(sum-now,str[cnt]-'0',cnt+1);
    return ;
}
void left(LL sum,LL now,int cnt)
{
    if(cnt)
    right(sum+now,str[cnt]-'0',cnt+1);
    if(cnt==n-1)
        return ;
    if(now)
    left(sum,now*10+(LL)(str[cnt]-'0'),cnt+1);
    left(sum+now,str[cnt]-'0',cnt+1);
}
int main()
{
    int i,j;
    while(scanf("%s",&str),str[0]!='E')
    {
        n=strlen(str);
        ans=0;
        left(0,0,0);
        printf("%d\n",ans);
    }
    return 0;
}

 

posted @ 2013-08-20 13:53  fangguo  阅读(154)  评论(0编辑  收藏  举报