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(0, 0);
cout<<cnt<<endl;
}
return 0;
}
#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(0, 0);
cout<<cnt<<endl;
}
return 0;
}