有点迷的容斥 + DP……
设 fi,j 表示第 i 个位置为 j 的方案数,并有 si=k∑j=1fi,j。
首先只有 ai=j 或 ai=−1 的时候 fi,j 有意义。
那么先不考虑限制条件,直接从 si−1 继承所有方案。
然鹅有限制,显然当同时满足以下两点时有不合法状态: 1. i≥len。 2. ai−len+1,…,ai 这一段可以通过修改 −1 为 j 变成一样的。
这个时候,不合法的状态是 si−len−fi−len,j。
之所以要多算一个 fi−len,j,是因为各种容斥,会把它多减一次。
代码:
1 |
|