#include<bits/stdc++.h>
#define MAX 501
using namespace std;
int N, M;
int dp[MAX][MAX];
int Map[MAX][MAX];
int dx[4] = {1, -1, 0, 0};
int dy[4] = {0, 0, 1, -1};
int DFS(int x, int y){
if(x==N-1 && y==M-1) return 1;
if(dp[x][y] != -1) return dp[x][y];
dp[x][y] = 0;
for(int i = 0; i < 4; i++){
int nx = x+dx[i];
int ny = y+dy[i];
if(nx>=0 && ny>=0 && nx<N && ny<M){
if(Map[nx][ny] < Map[x][y])
dp[x][y] += DFS(nx, ny);
}
}
return dp[x][y];
}
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
cin >> N >> M;
for(int i = 0; i < N; i++){
for(int j = 0; j < M; j++){
cin >> Map[i][j];
dp[i][j] = -1;
}
}
cout << DFS(0, 0);
}
댓글