下载了第一个测试数据输入8 6 0 4 输出1617
#include <iostream>
using namespace std;
int m, n;
void Init(long long G[][25], int a, int b) //对dp数组初始化,对方马的控制点初始化为0
{
if (a - 2 >= 0)
{
if (b - 1 >= 0)
{
G[a - 2][b - 1] = 0;
}
if (b + 1 <= m)
{
G[a - 2][b + 1] = 0;
}
}
if (a - 1 >= 0)
{
if (b - 2 >= 0)
{
G[a - 1][b - 2] = 0;
}
if (b + 2 <= m)
{
G[a - 1][b + 2] = 0;
}
}
if (a + 1 <= n)
{
if (b - 2 >= 0)
{
G[a + 1][b - 2] = 0;
}
if (b + 2 <= m)
{
G[a + 1][b + 2] = 0;
}
}
if (a + 2 <= n)
{
if (b - 1 >= 0)
{
G[a + 2][b - 1] = 0;
}
if (b + 1 <= m)
{
G[a + 2][b + 1] = 0;
}
}
G[a][b] = 0;
}
int main()
{
int a, b;
cin >> n >> m >> a >> b;
long long G[25][25];
Init(G, a, b);
G[0][0] = 1;
for (int i = 1;i <= m;i++) //对第0行初始化
{
if (G[0][i] != 0)
{
G[0][i] = G[0][i - 1];
}
}
for (int i = 1;i <= n;i++) //对第0列初始化
{
if (G[i][0] != 0)
{
G[i][0] = G[i - 1][0];
}
}
for (int i = 1;i <= n;i++)
{
for (int j = 1;j <= m;j++)
{
if (G[i][j] == 0) //若为对方马的控制点
{
G[i][j] = 0;
}
else
{
G[i][j] = G[i - 1][j] + G[i][j - 1];
}
}
}
cout << G[n][m];
return 0;
}
求大佬救一下