首先,我们需要理解题目的要求,即我们需要将不多于k个白色格子变成红色,以使得最多的红色格子纵向相邻。
解决这个问题的关键在于如何选择变色的白色格子。我们可以观察到,对于某一列连续出现的白色格子,记其数量为cnt,我们最多可以得到cnt−1个优美的格子
具体实现时,我们可以使用一个优先队列来存储每一列连续出现的白色格子的数量。优先队列的顶部是数量最多的格子。然后,我们每次从优先队列中取出一段格子进行变色,直到我们已经变色了k个格子。
通过这种方式,我们可以保证每次变色都能得到最多的优美的格子,从而得到最终的答案。
小红得到了一个矩阵。
该矩阵有若干个格子是黑色的,其余为白色,小红希望将不多于 k 个白色格子变成红色。特殊的,如果有两个红色格子纵向相邻,小红会把上面的红色格子看作是“优美的”。
小红想知道,最多可以有多少个优美的格子?
第一行三个整数 n,m,k,分别表示矩阵的行数和列数以及最多可以改变颜色的格子数。
接下来输入一个 n×m 的矩阵,表示矩阵的初始形态,其中 *
表示该格子为黑色,o
表示白色。
1≤n,m≤1000
1≤k≤n×m
一个整数表示答案。
4 4 3
*o*o
oooo
****
oooo
1