[USACO2.3] 零的数列Zero Sum

数据不大,可以暴力

#include<bits/stdc++.h>
using namespace std;
int n;
bool judge(string s){
    int ans=0;
    int num=0;
    char op='+';
    for(int i=0;i<=s.length();i++) {
        if(s[i]==' ') continue;
        char c=s[i];
        if(isdigit(c)) num=num*10+(c-'0');
        else {
            if(op=='+') ans+=num;
            else if(op=='-') ans-=num;
            op=c;
            num=0;
        }
    }
    return ans==0;
}
void dfs(int k,string s){
    if(k==n){
        s+=to_string(k);
        if(judge(s)) cout<<s<<"\n";
    }
    else{
	dfs(k+1,s+to_string(k)+" ");
	dfs(k+1,s+to_string(k)+"+");
	dfs(k+1,s+to_string(k)+"-");
    }
}
int main(){
    cin>>n;
    dfs(1,"");
    return 0;
}