专栏文章

题解:P14476 矩阵绘画

P14476题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@min44q1p
此快照首次捕获于
2025/12/01 20:15
3 个月前
此快照最后确认于
2025/12/01 20:15
3 个月前
查看原文
如果对合法染色方式计数,那么是容易的。考虑不相交的限制,提取出激活的 aa 的前缀 max\max,对这些前缀 max\max 做 dp,此时就将矩阵划分成了一些区域,每个区域要么全选列要么全选行,这样是容易计数的,处理 [1,i][1,i] 中所有后缀中 bj<aib_j<a_i 的信息即可,再预处理一下每个行,列的 01 信息,可以 O(n2)\mathcal O(n^2) 的复杂度算。
问题在于重复计数。考虑一个重复算的区域,要么是前缀全选行,要么是前缀全选列(一个 2×22\times 2 内部全为 11 的区域,考虑两行均被行染色以及两行均被列染色)。a1=0a_1=0 时压根不会数重,进而,猜测每个矩阵只会被至多两种方案算到。这样我们容斥:用总操作方案数,减去会被算到两次的矩阵个数,就是最终答案。
进而,只关心左上角 x×yx\times y 的矩阵内部,要求 maxixaiy,maxiybix\max_{i\leq x}a_i\leq y,\max_{i\leq y}b_i\leq x,并且全选行与全选列构成的 0101 矩阵完全相同。然后再乘上剩余部分的染色方案数即可,一个必要条件是 a,ba,b 单调不增,进而发现,这个区域只能取到 x=b1,y=a1x=b_1,y=a_1。这里再做 dp 可以沿用对 aa 的前缀 max\max 计数的思路,但是要修改 a1a_1 之后第一个前缀 max\max 的值。
时间复杂度 O(n2)\mathcal O(n^2)
代码咕咕咕,如有错误请指出。

评论

0 条评论,欢迎与作者交流。

正在加载评论...