传送门
一道略难的线性DP题目。
思路
逐个考虑以i结尾的子串,再逐个考虑当前以i结尾的子串是否包含由j个"abc".
状态定义:dp[i] = 以i结尾的某个子串的最大价值。
状态转移方程:
1. 当前的价值至少由为之前的最大价值,先继承。
2. 从小往大枚举当前以i结尾的子串有多少个"abc"。(因为是从前往后考虑,所以只须考虑子串开头的3个字符是否为"abc"即可,后面的元素如果不全为"abc"将不会进入当前循环。)
1. 如果满足要求:在现在的dp[i]和当前满足要求子串开头之前的最大值dp[l-1]取大,作为以i结尾的最大值dp[i]。
2. 如果不满足要求:之后的也不用再考虑了,此处已经出现了“断层”,break返回。
代码