文章目录

  • 1. 题目
  • 2. 解题

1. 题目

给定一个正整数 n,返回长度为 n 的所有可被视为可奖励的出勤记录的数量。
答案可能非常大,你只需返回结果mod 10^9 + 7的值。

学生出勤记录是只包含以下三个字符的字符串:

'A' : Absent,缺勤
'L' : Late,迟到
'P' : Present,到场

如果记录不包含 多于一个'A'(缺勤)或 超过两个连续的'L'(迟到),则该记录被视为可奖励的。

示例 1:
输入: n = 2
输出: 8
解释:
有8个长度为2的记录将被视为可奖励:
"PP" , "AP", "PA", "LP", "PL", "AL", "LA", "LL"
只有"AA"不会被视为可奖励,因为缺勤次数超过一次。
注意:n 的值不会超过100000。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/student-attendance-record-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

类似题目:
LeetCode 576. 出界的路径数(动态规划)
LeetCode 688. “马”在棋盘上的概率(DP)
LeetCode 935. 骑士拨号器(动态规划)

  • 状态压缩,理清楚状态如何转移就很简单了
class Solution {public:int checkRecord(int n) {int ans = 0, mod = 1e9+7;vector<vector<long long>> dp(n, vector<long long>(13, 0));// APLL, 4个二进制位, 表示结尾出现字符的情况// 8421dp[0][8] = 1; // A结尾dp[0][4] = 1; // P结尾dp[0][1] = 1; // L结尾for(int i = 1; i < n; i++) {// A结尾, 原来可能是 P,L,LL结尾dp[i][8] += (dp[i-1][4]+dp[i-1][1]+dp[i-1][2])%mod;// P结尾,原来没有A, 原来结尾可能是 P, L, LLdp[i][4] += (dp[i-1][4]+dp[i-1][1]+dp[i-1][2])%mod;// P结尾,原来有A, 原来结尾可能是 A, P, L, LLdp[i][12] += (dp[i-1][8]+dp[i-1][12]+dp[i-1][9]+dp[i-1][10])%mod;// L结尾,原来没有A, 原来结尾可能是 Pdp[i][1] += dp[i-1][4]%mod;// L结尾,原来有A, 原来结尾可能是 A, Pdp[i][9] += (dp[i-1][8]+dp[i-1][12])%mod;// LL结尾,原来没有A, 原来结尾可能是 Ldp[i][2] += dp[i-1][1]%mod;// LL结尾,原来有A, 原来结尾可能是 Ldp[i][10] += dp[i-1][9]%mod;}for(int i = 1; i <= 12; i++)ans = (ans+dp[n-1][i])%mod;return ans;}
};

1344 ms 441.4 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode 552. 学生出勤记录 II(动态规划)相关推荐

  1. LeetCode——552. 学生出勤记录 II(Student Attendance Record II)[困难]——分析及代码(Java)

    LeetCode--552. 学生出勤记录 II[Student Attendance Record II][困难]--分析及代码[Java] 一.题目 二.分析及代码 1. 动态规划 (1)思路 ( ...

  2. leetcode: 552. 学生出勤记录 II

    552. 学生出勤记录 II 来源:力扣(LeetCode) 链接: https://leetcode.cn/problems/student-attendance-record-ii/ 可以用字符串 ...

  3. 【Leetcode】552. 学生出勤记录 II

    552. 学生出勤记录 II 题目描述 解题思路 题目描述 可以用字符串表示一个学生的出勤记录,其中的每个字符用来标记当天的出勤情况(缺勤.迟到.到场).记录中只含下面三种字符: 'A':Absent ...

  4. 552. 学生出勤记录 II

    552. 学生出勤记录 II 可以用字符串表示一个学生的出勤记录,其中的每个字符用来标记当天的出勤情况(缺勤.迟到.到场).记录中只含下面三种字符: 'A':Absent,缺勤 'L':Late,迟到 ...

  5. 力扣 -- 551. 学生出勤记录 I 、 552. 学生出勤记录 II

    目录 551. 学生出勤记录 一 .题目描述 二. 实现思路以及代码 552. 学生出勤记录 II 一 .题目描述 二. 实现思路以及代码 551. 学生出勤记录 一 .题目描述 给你一个字符串 s  ...

  6. Leetcode 552.学生出勤记录‖ 动态规划+容斥

    题目链接:传送门 可以用字符串表示一个学生的出勤记录,其中的每个字符用来标记当天的出勤情况(缺勤.迟到.到场).记录中只含下面三种字符: 'A':Absent,缺勤 'L':Late,迟到 'P':P ...

  7. C++Python描述 LeetCode 551. 学生出勤记录 I

    C++&Python描述 LeetCode 551. 学生出勤记录 I   大家好,我是亓官劼(qí guān jié ),在公众号.CSDN.GitHub.B站.华为开发者论坛等平台分享一些 ...

  8. Java实现 LeetCode 551 学生出勤记录 I(暴力大法好)

    551. 学生出勤记录 I 给定一个字符串来代表一个学生的出勤记录,这个记录仅包含以下三个字符: 'A' : Absent,缺勤 'L' : Late,迟到 'P' : Present,到场 如果一个 ...

  9. Leetcode每日一题-学生出勤记录 II(Student Attendance Record II)

    可以用字符串表示一个学生的出勤记录,其中的每个字符用来标记当天的出勤情况(缺勤.迟到.到场).记录中只含下面三种字符: 'A':Absent,缺勤 'L':Late,迟到 'P':Present,到场 ...

最新文章

  1. Mysql INSERT INTO .. ON DUPLICATE KEY更新多行记录
  2. CSS文本对齐text-align详解
  3. 《Objective-C基础教程》第二章 对C的扩展
  4. Pat乙级1011题:A+B和C
  5. LeetCode 606. 根据二叉树创建字符串(递归)
  6. spring AOP实现——xml方法
  7. Angle Admin Template介绍
  8. 诗与远方:无题(六十八)
  9. 图嵌入综述 (arxiv 1709.07604) 译文第一、二章
  10. 火力发电厂与变电站设计防火标准_详细解析仓库防火设计标准
  11. 重装系统,超详细教程
  12. 七大江河水系--黑龙江
  13. linux批量修改文件名称脚本,linux批量文件改名脚本
  14. [免费专栏] 车联网基础理论之车联网安全车端知识科普
  15. 【SSH进阶之路】Hibernate基本映射(三)
  16. 01-最简单的Hello world程序
  17. MySQL的自身防御机制_自我防御机制
  18. python控制机器人走直线_python程序控制NAO机器人行走
  19. 爱因互动王守崑:未来机器人的服务质量会显著高于人类
  20. 百度知道怎么引流减肥粉?想要打破粉丝瓶颈,必须要借助一个有力的平台

热门文章

  1. 机器学习算法之线性回归
  2. vb.net服务器启动后cpu占用了70_记一次服务器被异常程序占用的解决过程(怀疑黑客攻击)...
  3. 查看centos中的用户和用户组
  4. 机器学习之朴素贝叶斯算法的推理及相关知识总结
  5. 面试题:找两个有序数组所有数第K小的数
  6. 网站服务器中病毒该如何处理,网站被中了木马无法删除怎么办? 解决网站中病毒的办法...
  7. jdbc mysql demo_JDBC_demo:java连接mysql过程
  8. [NOI2019]回家路线
  9. RISC-V踩坑记----__builtin_clz((x)库函数的应用
  10. bzoj1233 单调队列优化dp