【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();
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章