552. Student Attendance Record II
来源:互联网 发布:域名赎回期 编辑:程序博客网 时间:2024/06/06 10:07
这是一道典型的动态规划的题目,解题关键在于将原题目分解成适当的子题目。
我们将所有rewardable的考勤记录分成以P,A,L结尾的三种,分别用数组P[ ], L[ ], A[ ]三个数组来表示,P[n]指长度为n,以P结尾的rewardable的考勤记录,以此类推。
则所有长度为n的rewardable的考勤记录个数S = P[n] + L[n] + A[n]。
任何rewardable的考勤记录在结尾加上P以后仍然是rewardable的考勤记录,所以P[n] = A[n - 1] + P[n - 1] + L[n - 1]。
以P,A结尾的rewardable的考勤记录的结尾加上L以后仍然是rewardable的考勤记录,而以L结尾的rewardable的考勤记录只有倒数第二个考勤情况不是L时加上L以后才会是rewardable的考勤记录,所以L[n] = A[n - 1] + P[n - 1] + A[n - 2] + P[n - 2]。
A[n]的情况要复杂得多,很明显,A[n] = P[n - 1](不含A)+ L[n - 1](不含A)。而P[n] (不含A)= P[n - 1](不含A) + L[n - 1](不含A),L[n](不含A) = P[n - 1](不含A) + P[n - 2](不含A),化简可得A[n] = A[n - 1] + A[n - 2] + A[n - 3]。
值得注意的是最后的返回的应该是((A[n - 1] + P[n - 1]) % a + L[n - 1]) % a而不是(A[n - 1] + P[n - 1] + L[n - 1]) % a。
代码如下:
- 552. Student Attendance Record II
- 552. Student Attendance Record II
- 552. Student Attendance Record II
- 552. Student Attendance Record II
- 552. Student Attendance Record II
- 552. Student Attendance Record II
- 【LeetCode】552. Student Attendance Record II
- [LeetCode]552. Student Attendance Record II
- LeetCode 552. Student Attendance Record II
- leetcode 552. Student Attendance Record II
- leetcode#552. Student Attendance Record II
- [leetcode]552. Student Attendance Record II
- leetcode552. Student Attendance Record II
- [Leetcode] 552. Student Attendance Record II 解题报告
- leetcode_552.Student Attendance Record II ? 待解决
- [LeetCode] DP之 Student Attendance Record II
- Student Attendance Record I
- Student Attendance Record I
- Windows PE变形练手2-开发一套自己的PE嵌入模板
- 解决Android Studio运行java文件,控制台输出乱码问题
- Linux rpm/dpkg/yum/apt常用选项组合
- MongoDBPHP 扩展
- 【数据结构笔记】6:无向图的邻接多重表存储结构
- 552. Student Attendance Record II
- 数学界的「 流氓大咖」
- HDU2476:String painter 区间dp
- 设计模式---观察者模式
- 加载SDRAM以及ldr,bl实现跳转的区别
- mysql初探
- X
- PCA(主成成分分析)和LDA(线性判别分析)详解-共性和区别
- fullpage.js