京东9.17笔试第三题

简单dp,dp[i][a][b][k]表示i位的字符串,第i位为a,第i-1位为b,之前是否已经含有red(k为1表示有,0表示无) 的方案数,可以使用滚动数组优化掉第一维度
时间复杂度为 n*26*26*26*2,会t掉。故需要优化,可以考虑对字母进行压缩,分别用0,1,2,3来表示字母  r,e,d,其他字母 。这样时间复杂度可以降为n*4*4*4*2 ,具体转移方程可以看代码
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
const int mod = 1e9 + 7;
signed main()
{
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int n;
  cin >> n;
  vector<vector<vector<int>>> dp(5, vector<vector<int>>(5, vector<int>(2, 0)));
  for (int i = 0; i < 4; i++)
    for (int j = 0; j < 4; j++)
      dp[i][j][0] = (i == 3 ? 23 : 1) * (j == 3 ? 23 : 1);
  // R,E,D,$
  for (int i = 2; i < n; i++){
    vector<vector<vector<int>>> rdp(5, vector<vector<int>>(5, vector<int>(2, 0)));
    for (int c = 0; c < 4; c++)
      for (int b = 0; b < 4; b++)
        for (int a = 0; a < 4; a++){
          if (c == 2 && b == 1 && a == 0)//der不转移
            continue;
          rdp[a][b][(c == 0 && b == 1 && a == 2) ? 1 : 0] += dp[b][c][0] * (a == 3 ? 23 : 1);
          rdp[a][b][1] += dp[b][c][1] * (a == 3 ? 23 : 1);
          rdp[a][b][0] %= mod, rdp[a][b][1] %= mod;
        }
    dp = rdp;
  }
  int ans = 0;
  for (int i = 0; i < 4; i++)
    for (int j = 0; j < 4; j++)
      ans += dp[i][j][1], ans %= mod;
  cout << ans << endl;
}


#京东笔试#
全部评论
大佬也太强了吧,是竞赛爷吗,可以和小白加微信交流一下吗
3 回复 分享
发布于 2022-09-17 22:08 广东
大佬也太强了吧,是竞赛爷吗,可以和小白加微信交流一下吗
2 回复 分享
发布于 2022-09-17 22:14 广东
艹 我看到26*26以为是快速幂矩阵快速幂+字符串处理的题。没想到是dp
点赞 回复 分享
发布于 2022-09-22 11:38 北京
hi~同学,秋招遇“寒气”,牛客送温暖啦!23届秋招笔面经有奖征集中,参与就得牛客会员7天免费体验,最高赢300元京东卡!戳我去看>>>https://www.nowcoder.com/link/zhengjipinglun
点赞 回复 分享
发布于 2022-09-19 15:20 北京
Hello,我是恒生电子股份有限公司的校园大使,不想简历投递后“泡池子”, 登录链接:campus.hundsun.com/campus/jobs 填写我的推荐码:EVKGKJ 投递,简历第一时间送到HR面前,可查进度,快来投递吧~
点赞 回复 分享
发布于 2022-09-17 22:25 江西
求前两题答案
点赞 回复 分享
发布于 2022-09-17 21:22 北京

相关推荐

01-05 09:14
同济大学 Java
不要盒我呀:我要是9✌🏻我就选保研,保研了大四再找实习,实习之后,如果觉得自己不适合互联网工作模式,还能有其他选择,如果实习后决定了走互联网,也能提升学历提高竞争力
点赞 评论 收藏
分享
白火同学:1、简历可以浓缩成一页,简历简历先要“简”方便HR快速过滤出有效信息,再要“历”用有效信息突出个人的含金量。 2、教育背景少了入学时间~毕业时间,HR判断不出你是否为应届生。 3、如果你的平台账号效果还不错,可以把账号超链接或者用户名贴到对应位置,一是方便HR知道你是具体做了什么内容的运营,看到账号一目了然,二是口说无凭,账号为证,这更有说服力。
面试被问期望薪资时该如何...
点赞 评论 收藏
分享
评论
8
14
分享

创作者周榜

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