题目:串
思路:动态规划
代码如下:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
public class Main {
//快速输入
static BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
//快速输出
static PrintWriter pw=new PrintWriter(new OutputStreamWriter(System.out));
public static void main(String[] args) throws IOException {
String[] s=br.readLine().split(" ");
int n=Integer.parseInt(s[0]);
int p=(int) (Math.pow(10, 9)+7);
//dp[i][0]表示长度为i,不包含子序列'us'的字符串数量
//dp[i][1]表示长度为i,不包含子序列'us',但包含字符'u'的字符串数量
//dp[i][2]表示长度为i,包含子序列'us',的字符串数量
long[][] dp=new long[n+1][3];
dp[1][0]=25;
dp[1][1]=1;
long ans=0;
for(int i=2;i<=n;i++) {
dp[i][0]=(dp[i-1][0]*25l)%p;
dp[i][1]=(dp[i-1][0]+dp[i-1][1]*25l)%p;
dp[i][2]=(dp[i-1][2]*26l+dp[i-1][1])%p;
//题目要求的是长度不超过n的合法字符串数量之和,所以要将所有不同长度的合法字符串数量加上
ans=(ans+dp[i][2])%p;
}
pw.println(ans);
pw.flush();
}
}