zoukankan      html  css  js  c++  java
  • 超越学姐爱字符串

    链接:https://ac.nowcoder.com/acm/contest/1114/A
    来源:牛客网

    题目描述

    超越学姐非常喜欢自己的名字,以至于英文字母她只喜欢“c”和“y”。因此超越学姐喜欢只含有“c”和“y”的字符串,且字符串中不能出现两个连续的“c”。请你求出有多少种长度为n的字符串是超越学姐喜欢的字符串。答案对1e9+7取模。

    输入描述:

    输入一个整数n。
    1<=n<=100000

    输出描述:

    输出一个整数表示答案。
    示例1

    输入

    复制
    3

    输出

    复制
    5

    说明

    cyy,cyc,yyy,yyc,ycy

    思路:一个长度为n的字符串,只能有c和y。很容易往排列组合方面想,但是写不出来。。。。。
    换一个方法,这个串只能由c和y组成,那么从n等于1到n每次在末尾加一个字符,可以是c也可以是y。第n为为c,只能和n-1位为y的串组和。第n位为y,可以和第n-1位c和y的串组合。
    设1为c,0为y
    可以得出状态转移方程
    d[i][1]=d[i-1][0]
    d[i][0]=(d[i-1][0]+d[i-1][1])


    dp实现

    #include <iostream>
    
    using namespace std;
    const long long p =1e9+7;
    long long d[100000][2];
    int main()
    {
        int n;
        cin >> n;
        d[1][1]=1;
        d[1][0]=1;
        for(int i=2;i<=n;i++)
        {
            d[i][1]=d[i-1][0]%p;
            d[i][0]=(d[i-1][0]+d[i-1][1])%p;
        }
        cout << (d[n][0]+d[n][1])%p << endl;
        return 0;
    }

    斐波那契数列

    思路:n=1,ans=2;

       n=2,ans=3;

       n=3,ans=5;

       n=4,ans=8

    #include <iostream>
    
    using namespace std;
    const long long p =1e9+7;
    long long d[100005];
    int main()
    {
        int n;
        cin >> n;
        d[1]=2;
        d[2]=3;
        for(int i=3;i<=n;i++)
        {
            d[i]=(d[i-1]+d[i-2])%p;
        }
        cout << d[n] << endl;
        return 0;
    }
  • 相关阅读:
    面向对象的继承关系体现在数据结构上时,如何表示
    codeforces 584C Marina and Vasya
    codeforces 602A Two Bases
    LA 4329 PingPong
    codeforces 584B Kolya and Tanya
    codeforces 584A Olesya and Rodion
    codeforces 583B Robot's Task
    codeforces 583A Asphalting Roads
    codeforces 581C Developing Skills
    codeforces 581A Vasya the Hipster
  • 原文地址:https://www.cnblogs.com/wjc2021/p/11693200.html
Copyright © 2011-2022 走看看