轩载 神牛黑水浮云空间
#include#include char s[20];int sum,l;void work(int k,int cnt) /*cnt用来记录到当前k位置为止尚未被匹配的'(''的个数,如果出现负数直接 返回,如果到串尾并且cnt为0那么就是一种合法的状态,sum加1;否则继续DFS。*/{ if(k==l||cnt<0) {if(cnt==0) sum++;} else if(s[k]=='?') { work(k+1,cnt-1); work(k+1,cnt+1); } else { if(s[k]=='(') cnt+=2; work(k+1,cnt-1); }}int main(){ while(gets(s)){ l=strlen(s); sum=0; work(0,0); printf("%d\n",sum); }}