这题太赶单(简单)了!
给你两种代码,DP和普通递归:
//移动路线
#include <iostream>
using namespace std;
int n, m;
//递归写法
int move(int n, int m) {
if (n == 1 || m == 1)
return 1;
return move(m - 1, n) + move(m, n - 1);
}
int dp[30][30];
int main() {
cin >> n >> m;
// 递归写法
// cout << move(n, m);
/*
动态规划写法
状态
dp[i][j] 表示从 (1, 1) 到 (i, j) 的方案数
状态转移方程
dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
*/
for (int i = 1; i <= n; i ++)
dp[i][1] = 1;
for (int j = 1; j <= m; j ++)
dp[1][j] = 1;
for (int i = 2; i <= n; i ++)
for (int j = 2; j <= m; j ++)
dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
cout << dp[n][m];
return 0;
}
原题链接: 信息学奥赛一本通(C++版)在线评测系统 (ssoier.cn)
创作不易,留一个赞再走吧 (●'◡'●)