另一道不知道哪里来的容斥题

题意:给出一个012序列,进行m次操作,每次选择一个区间并把它变成全0。
要求序列上的2最终还是2,序列上的1最终变成0。

考虑只有0和2怎么做。
求出有多少种区间的选择方法数x。
ans=x^m。
带上1以后,有一个暴力的做法,直接容斥那些1最后没有变成0,然后把这些看成2来做。
复杂度O(2^n)。
有一个更优秀的做法,可以用dp去算这个容斥系数。
dp[i][k],k那一维是存了有多少个可行区间,显然K<=n^2。
每次转移的时候
遇到0直接复制。
遇到1决策是否把它变成2,转移的时候乘上-1。
遇到2考虑上一个2在哪里。
最后每一项直接m次方加起来即可。
复杂度O(n^4)。

posted @ 2019-01-31 20:29  Creed-qwq  阅读(85)  评论(0编辑  收藏  举报