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;
    }
  • 相关阅读:
    在ASP.Net中两种利用CSS实现多界面的方法
    c# 添加图片水印,可以指定水印位置+生成缩略图[付上帅图1,2,3,4]
    精力有限,本博客暂停维护,转到www.80back.com(个人的小站)
    设计一个silverlight的Button控件silverlight(银光)学习(1)
    asp.net(c#)上传图片生成缩略图
    DataGrid和存储过程结合的分页,只读取当前页数据
    c#实现google样式的分页
    asp.net MD5加密函数(c#)
    执行JS
    LoadRunner常见问题
  • 原文地址:https://www.cnblogs.com/dzzy/p/5330907.html
Copyright © 2011-2022 走看看