• 超越学姐爱字符串


    链接: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;
    }
  • 相关阅读:
    OGG for sqlserver engryption && insert/delete
    MySQL中SQL_CALC_FOUND_ROWS的用法
    VMWARE 虚拟机新增硬盘,格式化分区,并挂载
    Mycat实战之数据迁移(oracle -- mysql)
    MYCAT实战之分片迁移
    mycat实战之性能测试
    Mycat实战之主键数据库自增方式
    对象的创建与克隆
    c#调用c++的dll,错误篇
    java 模拟消息的发送功能
  • 原文地址:https://www.cnblogs.com/wjc2021/p/11693200.html
Copyright © 2020-2023  润新知