日,用了半天dp,没写出来。浪费了好多时间。发现搜索就可以。
/*
ID :
LANG: C++11
TASK: zerosum
*/
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <string>
#include <cmath>
#include <set>
using namespace std;
int N;
void dfs(int n, char c, int last, int sum, string s){
if (n == N){
if (sum == 0){
cout << s << endl;
}
return;
}
int t;
t = 9 * last + n + 1;
t *= c == '+' ? 1:-1;
string ts = s + ' ';
ts += char('0' + n + 1);
dfs(n + 1, c, last * 10 + n + 1, sum + t, ts);
ts[2 * n - 1] = '+';
dfs(n + 1, '+', n + 1, sum + n + 1, ts);
ts[2 * n - 1] = '-';
dfs(n + 1, '-', n + 1, sum - n - 1, ts);
}
int main()
{
freopen("zerosum.in", "r", stdin);
freopen("zerosum.out", "w", stdout);
std::ios::sync_with_stdio(false);
cin >> N;
dfs(1,'+', 1, 1, "1");
return 0;
}