USACO section2.3 Zero Sum题解&代码

来源:互联网 发布:capp软件 编辑:程序博客网 时间:2024/05/12 11:41

只需要按位数搜索,记录sum为0的情况
优先度为’ ‘>’+’>’-‘,需要记录的是之前位数可以计算出的值la和当前被操作的数no,下一个被操作数为p,当前位数后的符号即为s[p]
需要注意的一些小细节是在不加入操作符增加no时no>=0?no*10+p:no*10-p,在添加’-‘后下一个操作数将会是-p

/*ID:rainbow16LANG:C++TASK:zerosum*/#include<stdio.h>int n;char s[10];void dfs(int la,int no,int p){    if(p==n+1)    {        if(la+no==0)            for(int i=1;i<=n;i++)                printf("%d%c",i,s[i]);        return;    }    s[p-1]=' ';    dfs(la,no>=0?no*10+p:no*10-p,p+1);    s[p-1]='+';    dfs(la+no,p,p+1);    s[p-1]='-';    dfs(la+no,-p,p+1);}int main(void){    freopen("zerosum.in","r",stdin);    freopen("zerosum.out","w",stdout);    scanf("%d",&n);    s[n]='\n';    dfs(0,1,2);    return 0;}
0 0
原创粉丝点击