ColorfulBuilding
作者: 权大磊
关键字: 动态规划 前缀和优化
题目描述
现有 座房子排成一行, 编号为 的房子高度为 , 每座房子有一种颜色, 现给出两个字符串分别直接合并后得到 ,, 当且只当 并且 时认为 和 两座房子颜色相同, 现在从左往右看问有多少种房子的排列, 可以使人看到 种颜色变换。
数据范围:
时间限制:
空间限制:
题解
很容易想到用动态规划来解决这一问题, 为方便考虑, 我们将题目想成从小到大来填 个空位, 定义 表示前 个数看到 种颜色 时合法的排列个数。 枚举上一次看到的数是 ,那么第 个数需要放在剩下的第一个空格处,否则后面更大的数放在这个空格时将会破坏原来的颜色变换,剩下 个数在 个空格中任意选, 所以 。 (特殊处理)
此时时间复杂度为 , 用前缀和优化一下即可降为 。