串
难度:4星
为前个字符中不包含字母 的情况数量。
为前i个字符中包含字母 且不包含 子序列的情况数量
为前i个字符中包含 子序列的情况数量。
由于字符串中 之前是否存在 对结果不产生影响,因此也可以直接不考虑前i个字符中是否包含 的情况。
可得转移方程:
,即前 个字符不包含 ,第 个字符可选择除 以外的所有字符。
,即前 个字符包含 时第 个字符可选择除 以外的所有字符,当前 个字符不包含 时可选择在第 个字符选择 。
,即前 个字符包含 时第 个字符可选择任意字符,当前 个字符中包含 时,第 个字符可选择 。由于本题求长度不超过 的字符串,即将 输出即可
注意需对结果取模
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int mod = 1e9+7;
ll n , dp[1100000][3];
int main() {
scanf("%d",&n);
dp[1][0] = 25;
dp[1][1] = 1;
dp[1][2] = 0;
ll res = 0;
for (int i = 2 ; i <= n ; i ++) {
dp[i][0] = (dp[i-1][0]*25)%mod;
dp[i][1] = ((dp[i-1][1]*25)%mod+dp[i-1][0])%mod;
dp[i][2] = ((dp[i-1][2]*26)%mod+dp[i-1][1])%mod;
res = (res+dp[i][2])%mod;
}
printf("%lld\n",res);
}