QOJ 10019 Gold Coins 题解

链接

有一个 \(r\)\(c\) 列的 \(01\) 矩阵 \(s_{x, y}\) ,下标从 \(1\) 开始标号。

\(a_{x, y} = \sum_{j = 1}^ y s_{x, j}, b_{x, y} = \sum_{i = 1}^ x s_{i, y}\) 。一个 \(01\) 矩阵是好的,当且仅当所有 \(s_{x, y} = 1\) 的位置对应的 \((a_{x, y}, b_{x, y})\) 二元组是两两不同的。

现在给你一个矩阵 \(s\) ,你可以把其中一些位置从 \(0\) 改成 \(1\) ,问最少改几个位置能让这个矩阵变成好的。

注意不能把元素从 \(1\) 变成 \(0\) ,并且全是 \(1\) 的矩阵是好的,所以一定存在解。

\(r,c\le 300\)


通过手玩+猜测,可以得到下面这两个猜想:

  • 猜想一:不存在一个 \(0\) ,满足正下方和正右方都有 \(1\) 。即不存在 \(\matrix{0\ 1\\ 1\ ?}\) 作为子矩阵。
  • 猜想二:不存在 \(\matrix{1\ 0\\ 0\ 1}\) 作为子矩阵。

通过打表可得,这两个猜测都是对的,而且合法当且仅当满足这两个条件,即是充要的。下面我们来证明一下。

证明猜想一

首先,来考虑满足猜想一的矩阵有什么性质。根据观察,可以得到:

  • 性质一:对于同一列,从上往下 \(a\) 单调不升(这里的 \(a\) 就是题面中的 \(a\) )。
  • 说明:考虑第 \(i+1\) 列相比于第 \(i\) 列的变化,发现有可能有一个 \(1\) 从这一列开始变成 \(0\) ,除此之外一个后缀是 \(0\) 。对于 \(a\) 来说相当于一个前缀加,所以还是单调不升的。

由对称性,可得同一行 \(b\) 单调不升。

  • 性质二:对于一个值为 \(1\) 的格 \((x,y)\) ,对于所有 \(p\in [1,a_{x,y}],q\in [1,b_{x,y}]\) ,存在值为 \((p,q)\) 的格子。
  • 说明:考虑 \((x,y)\) 往上的第一个格子,发现 \(a\) 不会变小,且 \(b\leftarrow b-1\) ;再考虑往上的第一个格子,发现 \(a\leftarrow a-1\)\(b\) 不会变小。则只要这两个格子满足性质二,就能推出 \((x,y)\) 满足性质二,而 \((x,y)\) 上面或左边没有格子时是显然的。

现在来证明,有 \(\matrix{0\ 1\\ 1\ ?}\) 作为子矩阵就不合法。考虑找到一个 \((x,y)\) ,满足:

  • \((x,y)\) 这个位置是 \(0\)
  • \((x,y)\) 可以作为一个 \(\matrix{0\ 1\\ 1\ ?}\) 的左上角。
  • \((x,y)\) 左上方没有其他符合上面两个条件的点。

可以发现 \([1,x]\times [1,y]\) 这个子矩阵是满足猜想一的。记 \((x,y)\) 左边有 \(p\)\(1\) ,上面有 \(q\)\(1\) ,则所有除了 \(1\le i\le p+1,1\le j\le q+1\)\((i,j)\not =(p+1,q+1)\)\((i,j)\) 都出现过。这个是因为,考虑 \((x,y)\) 左边第一个 \(1\) 记为 \((x,z)\) ,则第 \(y\) 列的 \([1,x]\) 中的 \(1\) 都会在第 \(z\) 列出现,所以 \((x,z)\) 对应值为 \((p,q+1)\) 。同理有一个 \((p+1,q)\)

考虑 \((x,y)\) 下面的第一个 \(1\) ,发现它的值只能是 \((p+1,q+1)\) ,否则只会变小,就重复了。同理右边的第一个 \(1\) 也得是 \((p+1,q+1)\) ,这样就重复了。

由此可以推出原矩阵不合法,则猜想一得证。

证明猜想二

找到四元组 \((x_1,y_1,x_2,y_2)\) 满足 \(x_1<x_2,y_1<y_2\)\(s_{x_1,y_1}=s_{x_2,y_2}=1,s_{x_1,y_2}=s_{x_2,y_1}=0\) ,且 \((x_2,y_2)\)\(x_2+y_2\) 最小,且 \(x_2-x_1+y_2-y_1\) 最小 。只要我们证明了,存在一个点 \((p,q)\) ,满足 \(a_{p,q}\ge a_{x_2,y_2}\)\(b_{p,q}\ge b_{x_2,y_2}\) ,则 \((x_2,y_2)\) 就会重复,可以推出原矩阵不合法。

根据观察,可以得到:

  • 性质三:所有 \(x_1<i<x_2\) ,满足 \(s_{i,y_1}\ge s_{i,y_2}\) ,同理另一维也是一样的。
  • 证明:不满足只有可能是 \(s_{i,y_1}=0\)\(s_{i,y_2}=1\) ,此时四元组 \((i,y_1,x_2,y_2)\) 也是符合上述条件的,矛盾。

考虑 \((x_2,y_2)\) 左边第一个 \(1\) ,记为 \((x_2,q)\) ,再考虑上边第一个 \(1\) \((p,y_2)\) ,特别的,如果左边 \([y_1,y_2)\) 范围内没有 \(1\) 则令 \(q=y_1\) ,上面 \([x_1,x_2)\) 范围内没有 \(1\)\(p=x_1\) 。我们声称,\((p,q)\) 就是我们要的点。

证明:

  • \(s_{p,q}=1\) 。根据性质一,较为显然。如果 \(p=x_1\)\(q=y_1\) ,则可以由性质三得到。
  • \(a_{p,q}\ge a_{x_2,y_2}\) 。首先根据性质二可得 \(a_{p,q}\ge a_{x_2,y_2}-1\) ,根据性质三可得 \(a_{p,y_1}=1\) ,又由于 \(a_{x_1,y_2}=0\) ,则第 \(p_2\) 行会比第 \(x_2\) 行多一个 \(1\) ,可得 \(a_{p,q}\ge a_{x_2,y_2}\)
  • 同理可得 \(b_{p,q}\ge b_{x_2,y_2}\) ,于是得证。

充分性

温馨提示:这部分不是必须的。

相当于证明,只要满足猜想一和猜想二就一定合法。

假设有 \((x_1,y_1)\)\((x_2,y_2)\) 的值相等,按照相对位置分类:

  • \(x_1<x_2\)\(y_1>y_2\) :根据猜想一,\((x_1,y_2)\) 总是 \(1\) 。从 \((x_1,y_1)\)\((x_1,y_2)\) 发现 \(a\) 变小 \(b\) 变大,而 \((x_2,y_2)\)\((x_1,y_2)\) 发现 \(a\) 变大 \(b\) 变小,故总是不会相等。
  • \(x_1<x_2\)\(y_1<y_2\) :根据猜想二,\((x_1,y_2)\)\((x_2,y_1)\) 中肯定有一个 \(1\) ,不妨假设 \(s_{x_2,y_1}=1\) 。可以发现对于所有 \(j<y_1\) ,必须满足 \(s_{x_1,j}\le s_{x_2,j}\) ,否则不满足猜想一,则 \(a_{x_2,y_2}\) 肯定比 \(a_{x_1,y_1}\) 大。

得证。

另一个判定方法

其实有了这个,还是不太好做。

根据猜想一和猜想二,我们可以得到这么一个神秘的判断合法的方式:

  • 结论四:一个矩阵合法,当且仅当去掉空行空列后,存在 \((x,y)\) ,满足 \([1,x]\times [1,y]\) 全是 \(1\)\([x+1,n]\times [y+1,m]\) 全是 \(0\) ,剩下的是独立的合法矩阵。

这个结论的必要性是显然的。为了证明充分性,只要证明,对于所有没有空行空列的合法子矩阵,都能找到 \((x,y)\) 满足 \([1,x]\times [1,y]\) 全是 \(1\)\([x+1,n]\times [y+1,m]\) 全是 \(0\)

考虑那些向内的拐点,即 \((x,y)\) ,满足 \(s_{x,y}=0\) ,且 \([1,x]\times [1,y]\) 中除了 \((x,y)\) 都是 \(1\) 。猜想一相当于说,对于每个 \(0\) 都必须要有一条向下或向右的射线,满足射线上都是 \(0\) 。把拐点按 \(x\) 排序,如果有相邻的两个拐点 \((x_1,y_1),(x_2,y_2)\) ,其中 \(x_1<x_2\)\(y_1>y_2\) 且满足 \((x_1,y_1)\) 有向右的射线而 \((x_2,y_2)\) 有向下的射线,则根据猜想二,所有 \([x_2,n]\times [y_1,m]\) 内的点都是 \(0\) 。此时 \((x_2-1,y_1-1)\) 就是一种合法的划分。

考虑第一行和第一列的拐点,发现第一行拐点的射线总是向右,第一列拐点的射线总是向左,否则会出现空行空列。则总是能找到合法的划分。

证毕。

DP 及其优化

根据上面这个判定方式,我们就可以写出一个 \(\Theta(n^6)\) 的 DP :记 \(dp_{lx,rx,ly,ry}\) 表示把 \([lx,rx]\times [ly,ry]\) 这个子矩形变成好的,最少要几步。虽然复杂度很高,但振奋人心的是,它是多项式复杂度的!

注意到计算 DP 时, \([lx,n]\times [ly,m]\) 这个矩形,只有 \([lx,rx]\times [ly,ry]\) 有值,则只要关心 \(lx,ly\) ,其他会在去掉空行空列时被去掉。可以做到 \(\Theta(n^4)\)

接着注意到如果可以选 \((x,y)\) ,且也可以选 \((x,y-1)\)\((x-1,y)\) ,则肯定不会选 \((x,y)\) ,其中可以选指的是 \([x+1,n]\times [y+1,m]\) 都是 \(0\) 。这是因为,发现选 \((x,y-1)\)\((x-1,y)\) 会确定更少的 \(1\) ,而选 \((x,y)\) 合法的选 \((x,y-1)\)\((x-1,y)\) 仍然可以合法。

这样一个状态只会有 \(\Theta(n)\) 种转移,直接做就好了。复杂度 \(\Theta(n^3)\)

代码

posted @ 2025-05-23 15:02  Z_301  阅读(124)  评论(0)    收藏  举报