【CSU - 2325】How many LOL?

题目链接:http://acm.csu.edu.cn/csuoj/problemset/problem?pid=2325

dp解法:
F【N】:包含LOL的长度为N的字符串的数量。
L【N】:包含LOL的以L为开头的长度为N的字符串的数量。
递推关系式:
L【N】=26^(N-3)-L【N-2】+F【N-1】
F【N】=F【N-1】*26+(L【N】-F【N-1】)

#include<bits/stdc++.h>
#define rep(i,n) for(int i=1;i<=n;i++)
using namespace std;
typedef long long ll;

const int mod=1e9+7;
const int N=1e6+5;
ll n,m,k,x,y;
ll F[N],L[N],poww[N];

void solve() {
    cin>>n;
    cout<<(poww[n]-F[n]+mod)%mod<<'\n';
}

int main() {
    ios::sync_with_stdio(false);
    poww[0]=1;
    rep(i,1005) poww[i]=poww[i-1]*26%mod;
    for(int i=3;i<=1005;i++) {
        L[i]=poww[i-3]-L[i-2]+F[i-1];
        F[i]=F[i-1]*25+L[i];
        L[i]%=mod,F[i]%=mod;
    }
    int T;
    while(cin>>T) while(T--) solve();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值