需要看清题意。
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); } } }