```cpp
#include<iostream>
using namespace std;
#define int long long
const int dx[]={1,2,1,2,-1,-2,-1,-2};
const int dy[]={2,1,-2,-1,2,1,-2,-1};
int n,m;
int x,y;
int dp[25][25];
int ans=-1;
signed main(){
cin>>n>>m>>x>>y;
dp[x][y]=-1;
for(int i=0;i<8;++i){
int xx=x+dx[i];
int yy=y+dy[i];
dp[xx][yy]=-1;
}
dp[0][0]=0;
for(int i=0;i<=n;++i){
for(int j=0;j<=m;++j){
if(dp[i][j]==-1)break;
if(i==0){
if(j==0)dp[i][j]=0;
else dp[i][j]=max(dp[i][j],dp[i][j-1]);
}
else{
if(j==0)dp[i][j]=dp[i-1][j]+1;
else dp[i][j]=max(dp[i-1][j],dp[i-1][j-1])+1;
}
}
}
for(int i=0;i<=n;++i){
for(int j=0;j<=m;++j){
cout<<dp[i][j]<<' ';
ans=max(ans,dp[i][j]);
}
cout<<endl;
}
cout<<ans<<endl;
return 0;
}
```
by ZJLmath @ 2023-04-08 16:19:36
@[ZJLmath](/user/764672) 是不是要开 long long(
by QAQ__ @ 2023-04-08 16:28:33
@[ZJLmath](/user/764672) 建议再看看题,你是否多输出了一些内容
by Iictiw @ 2023-04-08 16:31:13
此外,你对马能走到的点的判断部分可能出现数组越界
by Iictiw @ 2023-04-08 16:32:46
调试代码没删嘞
by Super_excavator @ 2023-04-08 16:32:49
调试交的时候删了
by ZJLmath @ 2023-04-08 16:36:24
@[ZJLmath](/user/764672) 你这个数组里要从1开始枚举吧,反正你这样的话27/28行很似乎会出现dp[-1]
by wjh2022 @ 2023-04-08 16:46:59