zoukankan      html  css  js  c++  java
  • CCF 模拟D 动态规划

    http://115.28.138.223:81/view.page?opid=4

    这道题写的我醉醉的,想建一棵指定深度的树最后统计满足条件的个数

    居然没去考虑这样必然超时!!!代码写的也是醉了,把没完成的代码先贴出来,好好嘲讽下自己

    (╬▔皿▔)

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    int floorer,num,lable;//0 none ; 1 1 ; 3 3 ; 4 1&3
    bool shine1,shine0,shine3,shit,shit0;
    int x[]={0,2,1,3};
    int y[]={2,0,1,3};
    int donser1=0,donser2=0,donser3=0,donser4=0,donser5=0;
    bool dong1=false,dong2=false,dong3=false,dong4=false,dong5=false;
    void creatree(int lab,int flooor)
    {
    
        cout<<"-------->floor:"<<flooor<<"(12)"<<endl;
        if((flooor==floorer+1)&&shine0&&shine1&&shine3){cout<<"*********************************************";num++;}
        if(flooor==floorer+1){cout<<endl<<"&return "<<endl<<endl;return;}
        if(shit&&shit0)
        {
            for(int i=1;i<3;i++)
            {
                cout<<"lab -1 : "<<y[i]<<"(19)"<<endl;
                if(y[i]==0){dong1=shine0;shine0=1;donser1=1;}
                if(y[i]==1){dong1=shine1;shine1=1;lab=1;donser1=2;}
                if(y[i]==3){dong1=shine3;shine3=1;lab=3;donser1=3;}
                if(flooor==floorer+1){cout<<"++++"<<"(23)"<<endl;return;}
                int ii=flooor;
                creatree(lab,++ii);
                if(donser1==1){shine0=dong1;donser1=0;}
                if(donser1==2){shine1=dong1;donser1=0;}
                if(donser1==3){shine3=dong1;donser1=0;}
            }
        }
        if(lab==0)
        {
            for(int i=0;i<4;i++)
            {
                cout<<"lab 0 : "<<x[i]<<"(31)"<<endl;
                if(y[i]==0){dong2=shine0;shine0=1;donser2=1;}
                if(y[i]==1){dong2=shine1;shine1=1;lab=1;donser2=2;}
                if(y[i]==3){dong2=shine3;shine3=1;lab=3;donser2=3;}
                if(flooor==floorer+1){cout<<"????"<<"(35)"<<endl;return;}
                int ii=flooor;
                creatree(lab,++ii);
                if(donser2==1){shine0=dong2;donser2=0;}
                if(donser2==2){shine1=dong2;donser2=0;}
                if(donser2==3){shine3=dong2;donser2=0;}
            }
        }
        if(lab==1)
        {
            for(int i=1;i<4;i++)
            {
                cout<<"lab 1 : "<<x[i]<<"(43)"<<endl;
                if(x[i]==3){dong3=shine3;shine3=1;lab=4;shit=false;donser3=1;}
                if(flooor==floorer+1){cout<<"...."<<"(45)"<<endl;return;}
                int ii=flooor;
                creatree(lab,++ii);
                if(donser3==1){shine3=dong3;donser3=0;}
            }
        }
        if(lab==3)
        {
            for(int i=1;i<4;i++)
            {
                cout<<"lab 3 : "<<y[i]<<"(43)"<<endl;
                if(!y[i]==1&&!shine1){shit=true;}
                if(y[i]==1) {shit=false;dong4=shine1;shine1=1;lab=4;donser4=1;}
                if(flooor==floorer+1){cout<<"````"<<"(56)"<<endl;return;}
                int ii=flooor;
                creatree(lab,++ii);
                if(donser4==1){shine1=dong4;donser4=0;}
            }
        }
        if(lab==4)
        {
            for(int i=2;i<4;i++)
            {
                cout<<"lab 4 : "<<y[i]<<"(64)"<<endl;
                if(flooor==floorer+1){cout<<"----"<<"(65)"<<endl;return;}
                int ii=flooor;
                creatree(lab,++ii);
            }
        }
    }
    int main()
    {
        int n,flooor;
        while(cin>>n)
        {
            floorer=n;
            shine1=shine0=shine3=shit=shit0=false;
            num=lable=0;
            flooor=2;
            creatree(0,flooor);
            cout<<num<<endl;
            cout<<endl<<endl;
            cout<<"+++++++++++++++++++++++++++++++++++++++++++++++++++++++";
            shine1=shine0=shine3=shit=false;
            shit0=true;
            creatree(3,flooor);
            cout<<num<<endl;
            cout<<endl<<endl;
            cout<<"+++++++++++++++++++++++++++++++++++++++++++++++++++++++";
            shine1=shine0=shine3=shit=false;
            shit0=true;
            creatree(0,flooor);
            cout<<num<<endl;
        }
        return 0;
    }
    View Code
    #include<iostream>
    using namespace std;
    int main()
    {
        long long mod=1000000007;
        long long n;
        cin>>n;
        long long**donser=new long long*[n+1];
        for(long long i=0; i<n+1; i++)
            donser[i]=new long long[6];
        for(long long i=0; i<6; i++)
            donser[0][i]=0;
        /*6种状态
        *0--剩013
        *1--剩13
        *2--剩01
        *3--剩3
        *4--剩1
        *5--无
        */
        for(long long i=1; i<=n; i++)
        {
            long long j=i-1;
            donser[i][0]=1;
            donser[i][1]=(donser[j][0]+donser[j][1]*2)%mod;
            donser[i][2]=(donser[j][0]+donser[j][2])%mod;
            donser[i][3]=(donser[j][1]+donser[j][3]*2)%mod;
            donser[i][4]=(donser[j][1]+donser[j][2]+donser[j][4]*2)%mod;
            donser[i][5]=(donser[j][3]+donser[j][4]+donser[j][5]*2)%mod;
        }
        cout<<donser[n][5]<<endl;
        return 0;
    }
  • 相关阅读:
    创建自定义图标和图像
    使用_CRTDBG_LEAK_CHECK_DF检查VC程序的内存泄漏(转)
    Hadoop Netflix数据统计分析2(转)
    系统提供的按钮和图标
    STATIC变量问题
    表格视图,文本视图和Web视图
    Hadoop Netflix数据统计分析1(转)
    获取程序数据路径(转)
    C++中STRING转为INT (转)
    netflix 推荐算法学习1(转)
  • 原文地址:https://www.cnblogs.com/dzzy/p/5330907.html
Copyright © 2011-2022 走看看