官方题解 | #串#

http://www.nowcoder.com/practice/01c35f01fb7343fe9fc16139562f78ed

难度:4星

dp[i][0]dp[i][0] 为前ii个字符中不包含字母 uu 的情况数量。

dp[i][1]dp[i][1]为前i个字符中包含字母 uu 且不包含 usus 子序列的情况数量

dp[i][2]dp[i][2]为前i个字符中包含 usus 子序列的情况数量。

由于字符串中 uu 之前是否存在 ss 对结果不产生影响,因此也可以直接不考虑前i个字符中是否包含 ss 的情况。

可得转移方程:

dp[i][0]=dp[i1][0]25dp[i][0] = dp[i-1][0]*25,即前 i1i-1 个字符不包含 uu ,第 ii 个字符可选择除 uu以外的所有字符。

dp[i][1]=dp[i1][1]25+dp[i1][0]dp[i][1] = dp[i-1][1]*25+dp[i-1][0] ,即前 i1i-1 个字符包含 uu 时第 ii 个字符可选择除 ss以外的所有字符,当前 i1i-1 个字符不包含 uu 时可选择在第 ii 个字符选择 uu

dp[i][2]=dp[i1][2]26+dp[i1][1]dp[i][2] = dp[i-1][2]*26+dp[i-1][1] ,即前 i1i-1 个字符包含 usus 时第 ii 个字符可选择任意字符,当前 i1i-1 个字符中包含 uu 时,第 ii 个字符可选择 ss 。由于本题求长度不超过 nn 的字符串,即将 i=1ndp[i][2]\sum_{i=1}^n dp[i][2] 输出即可

注意需对结果取模

#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);
}

全部评论

相关推荐

缓解焦虑的最好方法是回家。鼠鼠昨天上午考完了本科阶段的最后一场考试,大概率考得稀烂,但是没多想,考完立马收拾行李,坐上了提前约好的顺风车飞奔回家。虽然家和学校很近,只有一百多公里的路程,但距离上次回家也已经有三四个月了。每次想回家,期间总有考试、毕业设计、面试、实习等等各种各样的原因,没办法回去,待在学校和公司的每一天也都充斥着无形的压力和焦虑。现在终于完成了答辩,考完了试,公司那边也请了假,是时候回去一趟了。没有提前通知爸妈,想给他们一个惊喜。下午提前到了家,他俩还在上班,只好让外公外婆来给我开门。因为我的回家,晚上外婆在厨房格外忙碌,做了满满一大桌子菜,填饱了我天天吃外卖的肚子。晚上也没空...
梦想是成为七海千秋:取决于家庭吧?其实回家更焦虑了,每天起床父母都问实习找好了没简历投递了没今天有没有面试,但是又没有什么结果,玩两下手机父母就会说你看你啥也没找到为什么天天就知道刷手机,怎么不去学习…我现在就希望我能永远在外面实习,报喜不报忧,等拿到一个好offer再回家
点赞 评论 收藏
分享
一tiao酸菜鱼:秋招还没正式开始呢,就准备有结果了。。。。?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务