zoukankan      html  css  js  c++  java
  • 不安全字符串

    不安全字符串

    Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other)
    Total Submission(s) : 15   Accepted Submission(s) : 11

    Font: Times New Roman | Verdana | Georgia

    Font Size: ← →

    Problem Description

    集训十分无聊,于是boss发明了一个“益智”游戏——假设有一段仅由U和L构成的字符串,我们定义当连续的U的个数大于等于三的时候,这个字符串是不安全的。现告诉你字符串的长度n,请你算出能够生成多少个不安全字符串。

    Input

    输入有多组,每组仅输入一个n,代表字符串的长度,当n等于0的时候输入结束。(4<=n<=30)

    Output

    输出可生成的不安全字符串的个数。

    Sample Input

    4
    5
    0

    Sample Output

    3
    8
    
    Hint:对于第一个样例,当n为4的时候,我们满足条件的有 UUUU LUUU UUUL 三种情况


    这题就有点水了,一开始想找规律,结果找了半天也没啥规律。
    我也是看了一下别人的代码才搞懂的。
    思路:递推吧,因为每一个情况都是由前一个情况转变过来的,所以用一个dp数组去存每个情况相应的值,每一层的意思如下:(i为当前序列的长度)

    dp[i][0]没有三个连续U的序列最右边为L
    dp[i][1]没有三个连续U的序列最右边有一个U
    dp[i][2]没有三个连续U的序列最右边有两个连续的U
    dp[i][3]有三个连续的U的序列

    结合每个情况可以发现

        1. dp[i][0]可以由dp[i-1][0]+dp[i-1][1]+dp[i-1][2]转变过来,因为前一状态只要不是有了3个连续的U的序列,在最右边加一个L就可以形成
        2. dp[i][1]可以由dp[i - 1][0]转变过来,因为只能是在最右边没有U的序列加上个U形成
        3. dp[i][2]可以由dp[i - 1][1]转变过来,因为只能是在最右边有一个U的序列加上个U形成
        4. dp[i][3]可以由dp[i - 1][3] * 2 + dp[i - 1][2]转变过来,因为如果原本就是有连续3个U的序列最右边加上什么都是该情况,然后也可以在最右边有两个U的序列加上个U形成
    
    
     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #define ll long long int
     5 using namespace std;
     6 ll dp[35][4];
     7 int main(){
     8     dp[1][0]=dp[1][1]=1;
     9     dp[1][2]=dp[1][3]=0;
    10     for(int i = 2; i < 33; i ++) {
    11         dp[i][0] = dp[i-1][0] + dp[i-1][1] + dp[i-1][2];
    12         dp[i][1] = dp[i-1][0];
    13         dp[i][2] = dp[i-1][1];
    14         dp[i][3] = dp[i-1][3]*2 + dp[i-1][2];
    15     }
    16     int m;
    17     while(scanf("%d",&m)&&m){
    18         printf("%d
    ",dp[m][3]);
    19     }
    20     return 0;
    21 }
    
    
    

  • 相关阅读:
    python基础学习笔记第二天 内建方法(s t r)
    p ython笔记第三天
    (转)字符编码笔记:ASCII,Unicode和UTF8
    const char * 和 char *const
    自己的毕业设计windows管理软件
    自己实现string类
    关于vs2003环境支持win7 的 IP设置
    很犀利的错误
    很容易犯的错误
    用C++ 设计一个不能被继承的类
  • 原文地址:https://www.cnblogs.com/zllwxm123/p/7260287.html
Copyright © 2011-2022 走看看