需要看清题意。
1 一次只能清楚一个蘑菇,不管里面种了几个。
2 一个格子里面可以种无穷多个
3 第二次统计最大值需要考虑第一次的影响。
import java.util.*;
public class Main{
public static void main(String[] args){
int[][] path={{1,0},{-1,0},{0,1},{0,-1},{1,1},{1,-1},{-1,1},{-1,-1},{0,0}};//循环3x3方格,搜索常用
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
int n=sc.nextInt();
int m=sc.nextInt();
int k=sc.nextInt();
int[][] nums=new int[n][m];
for(int index=0;index<k;index++){ //定义数组,nums[x][y]表示种的蘑菇数量
int x=sc.nextInt();
int y=sc.nextInt();
nums[x-1][y-1]++;
}
int ret=0;
int max=0;
int x0=0;
int y0=0;
//第一次统计最大可清楚蘑菇数量
for(int i=1;i<n-1;i++){
for(int j=1;j<m-1;j++){
int cnt=0;
for(int[] d:path){
if(nums[i+d[0]][j+d[1]]>0) cnt++;
}
if(cnt>max){
max=cnt;
x0=i;
y0=j;
}
}
}
ret+=max;
//在数组中减掉刚刚清楚的3x3
for(int[] d:path){
if(nums[x0+d[0]][y0+d[1]]>0){
nums[x0+d[0]][y0+d[1]]--;
}
}
//第二次统计可以清楚的最大蘑菇数
max=0;
x0=0;
y0=0;
for(int i=1;i<n-1;i++){
for(int j=1;j<m-1;j++){
int cnt=0;
for(int[] d:path){
if(nums[i+d[0]][j+d[1]]>0) cnt++;
}
if(cnt>max){
max=cnt;
x0=i;
y0=j;
}
}
}
//累加输出
ret+=max;
System.out.println(ret);
}
}
}


京公网安备 11010502036488号