#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int m, n;
int arr[501][501];
int ans[501][501];
bool rangecheck(int x, int y) {
return x < m && x >= 0 && y < n && y >= 0;
}
int calway(int x,int y) {
pair<int,int> move[4] = { {1,0},{-1,0},{0,-1},{0,1} };
if (x == m-1 && y == n-1)
return 1;
int &answer = ans[x][y];
if (answer != -1)
return answer;
answer = 0;
for (int i = 0; i < 4; i++) {
if (rangecheck((x + move[i].first), (y + move[i].second)) && arr[x + move[i].first][y + move[i].second] < arr[x][y])
answer += calway((x + move[i].first), (y + move[i].second));
}
return answer;
}
int main(void) {
cin >> m >> n;
memset(ans, -1, sizeof(ans));
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
cin >> arr[i][j];
}
}
cout << calway(0, 0);
return 0;
}
'백준 알고리즘 > 다이나믹 프로그래밍' 카테고리의 다른 글
백준 11054번 C++ (0) | 2019.02.13 |
---|---|
백준 1965번 C++ (0) | 2019.02.13 |
백준 11722번 C++ (0) | 2019.01.23 |
백준 11051번 C++ (0) | 2019.01.21 |
백준 11055번 C++ (0) | 2019.01.21 |