hdu 4403 A very hard Aoshu problem【dfs枚举】

来源:互联网 发布:图形化编程软件优缺点 编辑:程序博客网 时间:2024/06/07 06:21



点击打开链接


题意:

给你一串数字,你可以在数字之间添加一个“=”以及若干“+”号。问你问你有多少种合法的放法。


题解:

直接暴力枚举,枚举所有出加法,和合并的值。然后一个一个匹配。


#include<bits/stdc++.h>#define ll long longusing namespace std;string s,ed="END";int len,ans=0;int d[20],c[20],num[20];void dfs(int pos){    int ret,cnt;    if(pos>len) return ;    if(pos==len-1){        cnt=ret=0;        c[0]=0;        for(int i=0;i<len;++i){            ret=ret*10+num[i];            if(d[i]){                c[++cnt]=c[cnt-1]+ret;                ret=0;            }        }        if(ret) c[++cnt]=c[cnt-1]+ret;        for(int i=1;i<cnt;++i){            if(c[i]==c[cnt]-c[i])                ans++;        }    }    d[pos]=1;    dfs(pos+1);    d[pos]=0;    dfs(pos+1);}int main(){    while(cin>>s){        if(s==ed) break;        len=s.size();        ans=0;        for(int i=0;i<len;++i)            num[i]=s[i]-'0';        dfs(0);        printf("%d\n",ans);    }    return 0;}


原创粉丝点击