咋感觉这搜索都忘得一干二净了啦,哎,基础功太差了,得深山苦练20年啊。
#include<cstdio>
#include<iostream>
#define N 20
using namespace std;
char sym[N];
int n,num;
void display()
{
for(int i=1;i<n;++i)
printf("%d %c ",i,sym[i]);
printf("%d\n",n);
}
void dfs(int sum,int i,int pre)
{
if(i==n)
{
if(sum==0)
{
num++;
if(num<=20)
display();
}
return;
}
sym[i] = '+';
int next = i + 1;
dfs(sum+next,i+1,next);
sym[i] = '-';
dfs(sum-next,i+1,next);
sym[i] = '.';
if(i < 9)
next = pre*10+i+1;
else
next = pre*100+i+1;
int k = i-1;
while(sym[k]=='.') k--;
if(sym[k]=='+')
dfs(sum-pre+next,i+1,next);
else
dfs(sum+pre-next,i+1,next);
}
int main(void)
{
scanf("%d",&n);
sym[0]= '+';
num = 0;
dfs(1,1,1);
cout<<num<<endl;
return 0;
}