根据题目提示,我们可以得知这是一道比较简单的动态规划题目,我们可以初始化dp数组,并让dp[1][1] = 1, 并且用两个for循环遍历,因为只能往右或者下走,因此for循环完全可以,如果当前行数和列数为偶数直接让当前dp为0,如果不是,dp[i][j] += dp[i-1][j]; dp[i][j] += dp[i][j-1],最后直接输出dp[n][m]即可
上代码
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 35;
int dp[N][N] = {0};//定义dp数组用来记录每个方格的个数
int main(void)
{
int n, m; cin >> n >> m;//一共n行m列
dp[1][1] = 1;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (j % 2 == 0 && i % 2 == 0) dp[i][j] = 0;//如果当前方格都为偶数,就直接跳过
else{
dp[i][j] += dp[i - 1][j]; dp[i][j] += dp[i][j - 1];
};//否则当前方格就等于上一个方格的方案数目加上1
}
}
cout << dp[n][m] << endl;
return 0;
}