这是道比较经典的线性DP问题,当前的决策与上次决策有关,是 打家劫舍 的变形题
定义 dp[i][j] 表示前 i 天,且第 i 天选的字母是 j 的所有合法方案数。
状态转移为: dp[i][j]=∑k=jdp[i−1][k]。
即前 i 天选择字母 j 的方案数,等于前 i−1 天选择除 j 以外任意字母的方案数之和。
小明计划在接下来的 n 天中每天选修一门兴趣课。每一天都有一份可选课程列表,用一个由小写字母组成的字符串表示,字符串中的每个字母代表一门不同的课程。为了保证学习效果,他决定不连续两天选修同一门课。假设相同的字母代表相同的课程,问他一共有多少种符合要求的选课方案?由于答案可能很大,请将结果对 109+7 取模。
数据约束:天数 n 满足 1≤n≤105,每个课程列表字符串的长度不超过 20,且同一字符串内所有字母互不相同。
第一行包含一个整数 n,表示天数。 接下来的 n 行,每行输入一个仅包含小写字母的字符串,表示当天的可选课程列表,字符串内字母互不相同。
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.