#P16619. [GKS 2017 #B] Christmas Tree

[GKS 2017 #B] Christmas Tree

题目描述

给定一个 NNMM 列的矩形网格。每个格子被涂成两种颜色之一:绿色和白色。你的任务是找到该网格中最大的圣诞树中所包含的绿色格子数量。

为了定义圣诞树,首先定义好三角形如下:

以顶部位于第 RR 行、第 CC 列、高度为 hh 的好三角形是一个完全由绿色格子组成且尖朝上的等腰三角形。形式化地,这意味着:格子 (R,C)(R, C) 为绿色,并且对于每个 ii00h1h-1(包含两端),第 R+iR+i 行中从第 CiC-i 列到第 C+iC+i 列的所有格子均为绿色。

例如:

..#..
.####
#####

是一个高度为 33 的好三角形。其中 # 格子为绿色,. 格子为白色。注意,存在一个绿色格子不属于该好三角形,尽管它与好三角形相邻。

..#..
.###.
####.

不是一个好三角形,因为第 33 行的第 55 个格子是白色。然而,存在高度为 22 的好三角形。

...#.
.###.
#####.

不是一个好三角形。然而,存在高度为 22 的好三角形。

KK-圣诞树定义如下:

  • 它恰好包含 KK 个垂直排列的好三角形。
  • i+1i+1 个三角形的顶部必须与第 ii 个三角形底边中某个格子的下边沿相接。这意味着,如果第 ii 个三角形的底边位于第 rr 行,从第 c1c1 列到第 c2c2 列,那么第 i+1i+1 个三角形的顶部必须位于第 r+1r+1 行,且列号在 c1c1c2c2 之间(包含两端)。

例如,K=2K = 2 时:

...#...
..###..
.#####.
#######
..#....
.###...
#####..

是一个有效的 22-圣诞树。注意,两个好三角形的高度可以不同。

..#..
.###.
.#...

也是一个有效的 22-圣诞树。注意,好三角形的高度可以为 11,此时只包含一个绿色格子。

...#...
..###..
.#####.
.......
..#....
.###...
#####..

不是有效的圣诞树,因为第二个三角形必须从第 44 行开始。

...#.
..###
.#...
###..

不是有效的圣诞树,因为第二个三角形的顶部必须位于第 33 列到第 55 列之间(包含两端)。

你需要找出包含绿色格子数最多的 KK-圣诞树。

输入格式

输入的第一行给出测试用例的数量 TT。接下来有 TT 个测试用例。每个测试用例由三行组成:

  • 第一行包含三个空格分隔的整数 NNMMKK,其中 NN 是网格的行数,MM 是网格的列数,KK 是目标圣诞树中包含的好三角形的数量。
  • 接下来的 NN 行,每行恰好包含 MM 个字符。每个字符要么是 .(表示白色格子),要么是 #(表示绿色格子)。

输出格式

对于每个测试用例,输出一行,格式为 Case #x: y,其中 xx 是测试用例编号(从 11 开始),yy 是最大的 KK-圣诞树中所包含的绿色格子数量。如果不存在 KK-圣诞树,则输出 00

4
3 5 1
..#..
.###.
#####
3 5 1
.....
.....
.....
4 5 1
#####
#####
#####
#####
4 5 2
#####
#####
#####
#####
Case #1: 9
Case #2: 0
Case #3: 9
Case #4: 10

提示

限制条件

1T1001 \le T \le 100

1M1001 \le M \le 100

1N1001 \le N \le 100

网格中的每个字符要么是 .,要么是 #

小数据集(测试集 1 – 可见)

K=1K = 1

大数据集(测试集 2 – 隐藏)

1K1001 \le K \le 100

翻译由 DeepSeek V4 Pro 完成