P13647 [NOISG 2016] Fabric

题目描述

Kraw the Krow 有一块漂亮的布料。布料上的花纹非常精致,以至于每一部分都不相同。然而,在 2017 年的大火之后,这块布料上出现了许多难看的洞。(当然,这场大火是由 Squeaky the Rat 引发的。) Kraw 想要忘记那场大火,因为他并不喜欢高温。他希望能从布料上裁剪出一个矩形,把剩下的部分都扔掉。新的布料必须满足面积至少为 $K$,并且不能包含任何洞。 由于 Kraw 的布料具有“规-反对称”特性(或者别的什么——Kraw 已经不记得推销员说了什么),Kraw 只能沿着规则的网格线裁剪布料。Kraw 想知道,有多少种方法可以裁剪出一个面积至少为 $K$、且不包含任何洞的矩形。

输入格式

你的程序应从标准输入读取数据。输入包括: - 一行,包含三个整数 $N$ 和 $M$($1 \leq N, M \leq 2000$),分别表示布料的高度和宽度,以及 $K$($1 \leq K \leq MN$),即矩形的最小面积(以网格单元数计); - 接下来 $N$ 行,每行包含 $M$ 个整数 $s_{0y}, s_{1y}, \ldots, s_{(M-1)y}$。若坐标为 $(x, y)$ 的网格单元有洞,则 $s_{xy} = 1$,否则 $s_{xy} = 0$。

输出格式

输出一行,包含一个整数:表示可以裁剪出多少种面积至少为 $K$、且不包含任何洞的矩形。

说明/提示

### 样例解释 可以从布料上裁剪出 3 个面积至少为 3 的矩形。以左上角为 $(0, 0)$,它们分别是: - 2 个面积为 3 的矩形——$\{(1, 0), (2, 0), (3, 0)\}$,$\{(0, 1), (1, 1), (2, 1)\}$ - 1 个面积为 4 的矩形——$\{(1, 0), (2, 0), (1, 1), (2, 1)\}$ ### 子任务 每组数据的最大运行时间为 1.0 秒。你的程序将在以下输入范围内进行测试: | 子任务 | 分值 | 限制条件 | | :-: | :-: | :-: | | 1 | 7 | 满足 $0 < N, M \leq 2000$,$K = 1$ 且所有 $(x, y)$ 都有 $s_{xy} = 0$; | | 2 | 9 | 满足 $0 < N, M \leq 2000$,$K = 1$ 且仅有一个 $(x, y)$ 满足 $s_{xy} = 1$; | | 3 | 12 | 满足 $0 < N, M \leq 50$; | | 4 | 14 | 满足 $0 < N, M \leq 500$; | | 5 | 23 | 满足 $0 < N, M \leq 2000$ 且 $K = 1$; | | 6 | 35 | 满足 $0 < N, M \leq 2000$。 | 由 ChatGPT 4.1 翻译