zoukankan      html  css  js  c++  java
  • 暴力DFSG 等价交换

    #include<iostream>
    #include<string>
    #include<algorithm>
    #include<cstdlib>
    #include<cstdio>
    #include<set>
    #include<map>
    #include<vector>
    #include<cstring>
    #include<stack>
    #include<cmath>
    #include<queue>
    using namespace std;
    #define CL(x,v); memset(x,v,sizeof(x));
    #define INF 0x3f3f3f3f
    #define LL long long
    #define REP(i,n) for(int i=0;i<n;i++)
    const int MAXN=15;
    int g[MAXN];
    int n;
    //在一个等式的左边,pp为+前的数和,p为+后当前数和
    //如a+bb+c=a+bb+c=a+bb+c
    //当递归到第一个等号时,pp=a+bb,p=c
    //s为等号和
    //cas为递归到的符号
    //u为递归的深度
    int dfs(int u,int p,int pp,int s,int cas)
    {
        if(cas==0){
        pp+=p;
        p=g[u];
        }
        if(cas==1){
             pp+=p;
             p=0;
            if(s==-1){
                s=pp;
                p=g[u];
                pp=0;
            }else{
                if(s!=pp)return 0;
                p=g[u];
                pp=0;
            }
        }
        if(cas==2){
            p=p*10+g[u];
        }
        if(u==n-1){
            if(s==-1)return 0;
            if(s==pp+p)return 1;
            else return 0;
        }
        int ans=0;
        ans+=dfs(u+1,p,pp,s,0);
        ans+=dfs(u+1,p,pp,s,1);
        ans+=dfs(u+1,p,pp,s,2);
        return ans;
    }
    int main(){
        while(~scanf("%d",&n))
        {
            if(n==0)break;
            REP(i,n)scanf("%d",&g[i]);
            int ans=dfs(0,0,0,-1,0);
            printf("%d\n",ans);
        }
        return 0;
    }

    http://oj.huangdiandian.com/OnlineJudge

  • 相关阅读:
    Freemarker与Springmvc
    Freemarker与普通java
    Freemarker与Servlet
    跳舞的时间插件
    video标签播放视频
    字符串反转
    菲波拉契数列
    求所有子数组的和的最大值
    Spring AOP 5种通知与java动态代理
    线程维护日志队列
  • 原文地址:https://www.cnblogs.com/arbitrary/p/2965905.html
Copyright © 2011-2022 走看看