題目鏈接: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();
}