AC:
#include<bits/stdc++.h>
using namespace std;
long long a[50][50],b[50][50]; //b[i][j]表示从(0,0)到(i,j)的方案数
//a[i][j]表示马的阻挡点,
long long bx,by ,mx,my;
int main(){
cin>>bx>>by>>mx>>my;
a[mx][my]=1;
if(mx-2>=0&&my-1>=0) a[mx-2][my-1]=1;
if(mx-2>=0) a[mx-2][my+1]=1;
if(mx-1>=0) a[mx-1][my+2]=1;
a[mx+1][my+2]=1;
a[mx+2][my+1]=1;
if(my-1>=0) a[mx+2][my-1]=1;
if(my-2>=0) a[mx+1][my-2]=1;
if(mx-1>=0&&my-2>=0) a[mx-1][my-2]=1;
b[0][0]=1;
for(int i=0;i<=bx;i++)
for(int j=0;j<=by;j++){
if(i==0&&j==0) continue;
if(i==0) b[i][j]=(a[i][j]==1?0:b[i][j-1]);
if(j==0) b[i][j]=(a[i][j]==1?0:b[i-1][j]);
b[i][j]=(a[i][j]==1?0:b[i][j-1]+b[i-1][j]);
}
cout<<b[bx][by];
return 0;
}
WA:
#include<bits/stdc++.h>
using namespace std;
long long a[50][50],b[50][50]; //b[i][j]表示从(0,0)到(i,j)的方案数
//a[i][j]表示马的阻挡点,
long long bx,by ,mx,my;
int main(){
cin>>bx>>by>>mx>>my;
a[mx][my]=1;
if(mx-2>=0&&my-1>=0) a[mx-2][my-1]=1;
if(mx-2>=0) a[mx-2][my+1]=1;
if(mx-1>=0) a[mx-1][my+2]=1;
a[mx+1][my+2]=1;
a[mx+2][my+1]=1;
if(my-1>=0) a[mx+2][my-1]=1;
if(my-2>=0) a[mx+1][my-2]=1;
if(mx-1>=0&&my-2>=0) a[mx-1][my-2]=1;
b[0][0]=1;
for(int i=0;i<=bx;i++)
for(int j=0;j<=by;j++){
if(i==0&&j==0) continue;
if(i==0) b[i][j]=(a[i][j]==1?0:b[i][j-1]);
if(j==0) b[i][j]=(a[i][j]==1?0:b[i-1][j]);
b[i][j]=(a[i][j]==1?0:b[i][j-1]+b[i-1][j]);
}
cout<<b[bx][by];
return 0;
}