【USACO】Zero Sum

日,用了半天dp,没写出来。浪费了好多时间。发现搜索就可以。
/*
ID :
LANG: C++11
TASK: zerosum
 */

#include 
#include 
#include 
#include 
#include 
#include 
#include 

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;
}



你可能感兴趣的:(USACO,搜索)