//过河卒 //dp #include<bits/stdc++.h> using namespace std; typedef long long ll; ll mp[30][30]; ll f[30][30]; // int dir[][2]={{2,1},{2,-1},{-2,1},{-2,-1},{1,2},{1,-2},{-1,2},{-1,-2}};//八个方向 int xx[10]; // 存控制点行 int yy[10]; //存控制点列 int main() { ios::sync_with_stdio(false); cin.tie(0);cout.tie(0); int m,n,x,y; cin>>n>>m>>x>>y; n++,m++,x++,y++; //从1行1列开始,避免坐标出现负数 xx[8]=x,yy[8]=y;//马自己所在的位置是一个控制点 for(int i=0;i<8;i++) if( x+dir[i][0] >=1 && y+dir[i][1] >=1) xx[i]=x+dir[i][0],yy[i]=y+dir[i][1]; else//如果控制点不在棋盘,不妨存C点 xx[i]=x,yy[i]=y; for(int i=1;i<= n;i++) for(int j=1;j<=m;j++) { int flag=0; for(int k=0;k<9;k++)//九个控制点逐个检查 { if(i==xx[k] && j==yy[k]) { flag=1; break; } } if(!flag) { if(i== 1 && j==2) f[i][j]=1;//起点相邻的两点要特判 else if(i ==2 && j==1) f[i][j]=1; else f[i][j]=f[i-1][j]+f[i][j-1];//一般情况用dp } } cout<<f[n][m]<<endl; }