HDOJ2266(How Many Equations Can You Find)dfs

#include <iostream>
#include 
<string>
using namespace std;

string str;//起始值

long finNum;//需转化到的值
int cnt;//转化方案数

long str2dig(int s, int e)
{
    
long sum = 0
;
    
for(; s <= e; s++
)
        sum 
= sum * 10 + str[s] - '0'
;
    
return
 sum;
}


void dfs(int result, int s)
{
    
if(s >=
 str.length())
    
{
        
if(result ==
 finNum)
            cnt
++
;
    
//    cout<<result<<endl;

    }

    
else
    
{
        
for(int i = s; i < str.length(); i++
)
        
{
            
//+方案

            dfs(result + str2dig(s, i), i + 1);
            
if(s != 0)//第一个数当然不可能前面有-号

            {
                dfs(result 
- str2dig(s, i), i + 1
);
            }

        }

    }

}


int main()
{
    
while(cin>>str>>
finNum)
    
{
        cnt 
= 0
;
        dfs(
00
);
        cout
<<cnt<<
endl;
    }

    
return 0;
}

posted on 2009-03-23 09:17  Xredman  阅读(324)  评论(0编辑  收藏  举报

导航