这题思路挺简单的,但是WA了两点。。。下载下来发现居然是负数。。。可是没看出哪越界了啊。。。
#include<bits/stdc++.h>
#define maxn 21
using namespace std;
int n,m,hx,hy;//horse_x/y
bool horse[maxn][maxn];
unsigned long long dp[maxn][maxn];
signed main()
{
scanf("%d%d%d%d",&n,&m,&hx,&hy);
n+=1;m+=1;hx+=1;hy+=1;
horse[hx-2][hy-1]=horse[hx-1][hy-2]=horse[hx+1][hy-2]=
horse[hx+2][hy-1]=horse[hx+2][hy+1]=horse[hx+1][hy+2]=
horse[hx-1][hy+2]=horse[hx-2][hy+1]=horse[hx][hy]=1;
dp[1][1]=1;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(horse[i][j]) continue;
if(dp[i-1][j])
{
dp[i][j]+=dp[i-1][j];
}
if(dp[i][j-1])
{
dp[i][j]+=dp[i][j-1];
}
}
}
#if 0
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cout<<dp[i][j]<<" ";
}
cout<<endl;
}
#endif
printf("%lld\n",dp[n][m]);
return 0;
}