代码丑陋,见谅。
我一直是60分,我看了题解后,都要加上2,我知道是为了防止出现负数下标。但是我认为不加也是可以的,只要在标记马的下标时特判一下就好了。
可是,还是错的。我觉得不加2也是可以的呢。求助大佬们,你们认为呢?
#include<bits/stdc++.h>
using namespace std;
const int N=100;
int ds[][2]={{-2,-1},{-2,1},{-1,-2},{-1,2},{1,2},{1,-2},{2,1},{2,-1}};
int d[][2]={{-1,0},{0,-1}};
long long mp[N][N],dp[N][N];
int main()
{
int n,m,px,py;
cin>>n>>m>>px>>py;
for(int i=0;i<=n;i++)
dp[i][0]=1;
for(int i=0;i<=m;i++)
dp[0][i]=1;
mp[px][py]=1,dp[px][py]=0;
for(int i=0;i<8;i++)
{
int tx=px+ds[i][0];
int ty=py+ds[i][1];
if(tx>=1&&tx<=n&&ty>=1&&ty<=m)
mp[tx][ty]=1,dp[tx][ty]=0;
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(!mp[i][j])
{
dp[i][j]=max(dp[i][j],dp[i-1][j]+dp[i][j-1]);
}
}
}
printf("%lld\n",dp[n][m]);
return 0;
}