题目描述:
园区某部门举办了 Family Day,邀请员工及其家属参加;将公司园区视为一个矩形,起始园区设置在左上角,终点园区设置在右下角;家属参观园区时,只能向右和向下园区前进;求从起始园区到终点园区会有多少条不同的参观路径;
输入描述:
第一行为园区长和宽;
后面每一行表示该园区是否可以参观,0 表示可以参观,1 表示不能参观
输出描述:
输出为不同的路径数量
补充说明:
1 <= 园区长 <= 100
1 <= 园区宽 <= 100
示例1:
输入
3 3
0 0 0
0 1 0
0 0 0
输出
2
C++源码:
#include <iostream>
#include <vector>
using namespace std;
int main() {
int m, n;
cin >> m >> n;
vector<vector<int>> grid(m, vector<int>(n));
for (int i = 0; i < m; ++i) {
for (int j = 0; j < n; ++j) {
cin >> grid[i][j];
}
}
// 初始化动态规划数组
vector<vector<int>> dp(m, vector<int>(n));
for (int i = 0; i < m; ++i) {
for (int j = 0; j < n; ++j) {
if (grid[i][j] == 1) {
dp[i][j] = 0;
}
else if (i == 0 && j == 0) {
dp[i][j] = 1;
}
else if (i == 0) {
dp[i][j] = dp[i][j - 1];
}
else if (j == 0) {
dp[i][j] = dp[i - 1][j];
}
else {
dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
}
}
}
cout << dp[m - 1][n - 1] << endl;
system("pause");
return 0;
}