题解:
#include <iostream>
using namespace std;
int n, m;
// 记忆化数组
int f[31][31];
// 搜索点 (x, y),并返回从点 (x, y) 开始,能到点 (n, m) 的路径数量
int dfs(int x, int y)
{
//x或者y是奇数 即可走
if (x & 1 || y & 1)
{
// 如果该点已经被搜索过,那么不再处理
if (f[x][y]) return f[x][y];
// 否则说明没搜索过,需要搜索一遍
//向下
if (x < n) f[x][y] += dfs(x + 1, y);
//向上
if (y < m) f[x][y] += dfs(x, y + 1);
}
// 最后返回 f[x][y] 即可
return f[x][y];
}
int main()
{
cin>>n>>m;
if(n%2 == 0 && m%2==0){
//都为偶数
f[n][m] = 0;
}else{
f[n][m] = 1;
}
cout<<dfs(1,1);
return 0;
}