第一行输入三个整数
,分别表示矩阵行数、列数及最多可染红的格子数量。
此后
行,每行输入一个长度为
的字符串
,描述第
行初始状态:
``
`` 代表黑色格子,不能重新染色;
``
`` 代表空白格子,可选择染为红色。
输出一个整数,表示小红通过最佳策略能够获得的最大分数。
4 4 3 *o*o oooo **** oooo
1
一种可行方案如下(```` 为染成红色后的格子):
*r*o
oroo
****
oooo
红色格子共有个,其中正下方同列的红色对数为
,因此得分
。
3 3 3 *o* *o* *o*
2
n, m, k = map(int, input().split()) array = [[x for x in input()] for _ in range(n)] arr = [] # 记录每个连续空白可得分数 for col in range(m): coun = -1 for row in range(n): # 遇到黑色格子,存储分数,并重置 if array[row][col] == '*': if coun >= 0: # 避免连续黑色格子添加-1的情况 arr.append(coun) coun = -1 else: coun += 1 # 列尾时添加该分数到arr if coun >= 0: arr.append(coun) arr.sort(reverse=True) score = 0 for i in range(len(arr)): if arr[i]+1 < k: score += arr[i] k -= (arr[i]+1) else: score += (k-1) k = 0 break print(score)