太弱了 起初看不懂题目 看了上交的题解里才明白 代码也算是仿照大佬写的。
using namespace std;
int n,r;
int a[30][30];
int num[40][40];
void check(int x,int y){
int xx=x,yy=y;
for(int i =0;i<n;i++){
for(int j =0;j<n;j++){
if(abs(x-i)+abs(y-j)<=r&&a[i][j]>a[xx][yy]){//细节在于每次只是从原地探访其他可以在r时间内到达的房间 就有了且前面的条件 这也是题目给出的
xx=i,yy=j;
}
}
}
if(xx!=x||yy!=y){
num[xx][yy]+=num[x][y];
num[x][y]=0;
check(xx,yy);
}
}
int main(){
cin >> n>>r;
for(int i =0;i<n;i++){
for(int j =0;j<n;j++){
cin >> a[i][j];
num[i][j]=1;
}
}
for(int i =0;i<n;i++){
for(int j =0;j<n;j++){
check(i,j);
}
}
int sum =0,maxnum=0;
for(int i =0;i<n;i++){
for(int j =0;j<n;j++){
if(num[i][j]>=1) sum++;
maxnum=max(maxnum,num[i][j]);
}
}
cout<<sum<<" "<<maxnum<<endl;
return 0;
}