【牛客练习赛53】A-超越学姐爱字符串

// 题目地址:https://ac.nowcoder.com/acm/contest/1114/A
/*
    找规律(碰运气)
    n:1 = 2
    n:2 = 3
    n:3 = 5
    n:4 = 8
    ...

    dp解法(参考牛客题解)
    dp[i][0]:长度为 i, 字符最后一个字符为'c'的情况数
    dp[i][1]:长度为 i, 字符最后一个字符为'y'的情况数
    则有:
        dp[i + 1][0] = dp[i][1]; 即每个以'p'结尾的字符串都可以加个'c'(保证不会有'c'连续)
        dp[i + 1][1] = dp[i][1] + dp[i][0]; 'p'的限制没'c'大,所以在任何字符串后面加'p'都可
*/
#include<iostream>
#include<cstdio>
using namespace std;

typedef long long LL;
const int mod = 1e9 + 7;
const int inf = 100000;
int n;
//LL num[100005];
LL dp[100005][2];

//void init(){
//    num[1] = 2; num[2] = 3;
//    for(int i = 3; i <= inf; i++){
//        num[i] = (num[i - 1] + num[i - 2]) % mod;
//    }
//}

void workindp(){
    dp[1][0] = dp[1][1] = 1;
    for(int i = 2; i <= inf; i++){
        dp[i][0] = dp[i - 1][1];
        dp[i][1] = (dp[i - 1][1] + dp[i - 1][0]) % mod;
    }
}

int main()
{
//    init();
    workindp();
    while(~scanf("%d", &n)){
//        printf("%lld
", num[n]);
        printf("%lld
", (dp[n][0] + dp[n][1]) % mod);
    }
    return 0;
}

原文地址:https://www.cnblogs.com/Ayanowww/p/12013522.html