#include <iostream>
#include <vector>
#include <numeric>
#include <limits>
using namespace std;
/*请完成下面这个函数,实现题目要求的功能
当然,你也可以不按照下面这个模板来作答,完全按照自己的想法来 ^-^
******************************开始写代码******************************/
int DynamicPathPlanning(vector < vector < int > > matrixGrid) {
int m = matrixGrid.size(); //行数
int n = matrixGrid[0].size();//列数
long p[m][n];
//第一列赋值
int k = 0;
while(k < m && matrixGrid[k][0] != 1)
p[k++][0] = 1;
//如果遇到了障碍物则它及其后面的值都为0
while(k < m)
p[k++][0] = 0;
//第一行赋值
k = 0;
while(k < n && matrixGrid[0][k] != 1)
p[0][k++] = 1;
while(k < n)
p[0][k++] = 0;
for(int i = 1; i < m; i++)
for(int j = 1; j < n; j++){
if(matrixGrid[i][j] == 1) //如果遇到障碍物,则该位置的值为0
p[i][j] = 0;
else
p[i][j] = p[i - 1][j] + p[i][j - 1];
}
return p[m-1][n-1];
}
/******************************结束写代码******************************/
int main() {
int res;
int _matrixGrid_rows = 0;
int _matrixGrid_cols = 0;
cin >> _matrixGrid_rows >> _matrixGrid_cols;
vector< vector < int > > _matrixGrid(_matrixGrid_rows);
for(int _matrixGrid_i=0; _matrixGrid_i<_matrixGrid_rows; _matrixGrid_i++) {
for(int _matrixGrid_j=0; _matrixGrid_j<_matrixGrid_cols; _matrixGrid_j++) {
int _matrixGrid_tmp;
cin >> _matrixGrid_tmp;
_matrixGrid[_matrixGrid_i].push_back(_matrixGrid_tmp);
}
}
res = DynamicPathPlanning(_matrixGrid);
cout << res << endl;
return 0;
}