본문 바로가기
백준 알고리즘/다이나믹 프로그래밍

백준 1520번 C++

by paysmile 2019. 1. 23.


#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