#include <iostream>
#include <cstring>
using namespace std;
bool a[30][30];
int d[9][2]={{-2,-1},{-2,1},{-1,-2},{-1,2},{0,0},{1,-2},{1,2},{2,-1},{2,1}};
long long f[30][30];
int main()
{
int b1,b2,m1,m2,i,j;
cin >> b1 >> b2 >> m1 >> m2;
for(i = 0;i < 9;++i)
{
int x = m1 + d[i][0],y = m2 + d[i][1];
if(x >= 0 && x <= b1 && y >= 0 && y <= b2) a[x][y] = 1;
}
for(i = 0;i <= b1; ++i) if( ! a[i][0] ) f[i][0] = 1;
for(j = 0;j <= b2; ++j) if( ! a[0][j] ) f[0][j] = 1;//边界问题
for(i = 1;i <= b1; ++i)
for(j = 1;j <= b2; ++j)
if(!a[i][j]) f[i][j] = f[i-1][j] + f[i][j-1];//状态转移方程
cout << f[b1][b2];
return 0;
}
错两个点
wtf?