zoukankan      html  css  js  c++  java
  • 钥匙计数之一

    分析:首先想到每个钥匙的结尾有4种状态,不过题目还需要判断有三种不同的钥匙深度,所以每种深度结尾后有2^4种状态,0000->1111,不过题目还需需要有相邻的钥匙深度大于等于3,所以需要两种不同的状态表示0表示没有出现过这样的,1表示出现过,然后开一个4维的数组进行状态转移就好了dp[MAXN][bit][1<<bit][2]。

    代码如下:

    ============================================================================================================================

    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    #include<math.h>
    using namespace std;
    
    const int MAXN = 32;
    const int bit = 4;
    
    long long dp[MAXN][bit][1<<bit][2];
    
    int main()
    {
        dp[1][0][1][0] = dp[1][1][2][0] = 1;
        dp[1][2][4][0] = dp[1][3][8][0] = 1;
    
        for(int i=1; i<MAXN; i++)
        for(int j=0; j<bit; j++)
        for(int k=0; k<(1<<bit); k++)
        {
            if(dp[i][j][k][0])
            {
                for(int t=0; t<4; t++)
                {
                    if(abs(j-t) == 3)
                        dp[i+1][t][k|(1<<t)][1] += dp[i][j][k][0];
                    else
                        dp[i+1][t][k|(1<<t)][0] += dp[i][j][k][0];
                }
            }
            if(dp[i][j][k][1])
            {
                for(int t=0; t<4; t++)
                    dp[i+1][t][k|(1<<t)][1] += dp[i][j][k][1];
            }
        }
    
        long long sum[MAXN]={0};
    
        for(int i=3; i<MAXN; i++)
        for(int j=0; j<bit; j++)
        for(int k=7; k<16; k++)
        {
            if(k==7||k==11||k>=13)
                sum[i] += dp[i][j][k][1];
        }
    
        for(int i=2; i<MAXN; i++)
        {
            printf("N=%d: %lld
    ", i, sum[i]);
        }
    
        return 0;
    }
  • 相关阅读:
    SpringBoot之Banner介绍
    SpringBoot事件监听机制
    SpringBoot 启动流程图
    ApplicationContextInitializer的理解和使用
    SpringFactoriesLoader解析
    计时器之StopWatch
    ftp上下载文件
    打印两个函数的返回值
    关闭所有已打开的文件和关闭应用
    TypeError: include() got an unexpected keyword argument 'app_name'
  • 原文地址:https://www.cnblogs.com/liuxin13/p/4849651.html
Copyright © 2011-2022 走看看