“当每个红色的格子其下方的格子也为红色是得1分” -> 在垂直方向上连续k个空白格子最多可以得到k-1分
统计所有垂直方向上连续的空白格子,考虑到优先涂最长的格子是最优的,将空白格子长度逆序排序后遍历即可
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
int n = in.nextInt();
int m = in.nextInt();
int k = in.nextInt();
String[] strs = new String[n];
for(int i = 0;i < n;i ++){
strs[i] = in.next();
}
ArrayList<Integer> list = new ArrayList<>();
for(int i = 0;i < m;i++){
int count = 0;
for(int j = 0;j < n;j++){
if(strs[j].charAt(i) == 'o')count ++;
//检索所有上下连续的格子
else{
list.add(count);
count = 0;
}
}
list.add(count);
}
list.sort(Comparator.reverseOrder());//从高到低排序
int result = 0;
for(int length : list){
if(k > length){
//当前可以染色所有的格子
result += length - 1;
k -= length;
}
else{
//只能染部分格子,得分为当前染色数-1
result += k - 1;
break;
}
}
System.out.print(result);
}
}



京公网安备 11010502036488号