1937번: 욕심쟁이 판다
n*n의 크기의 대나무 숲이 있다. 욕심쟁이 판다는 어떤 지역에서 대나무를 먹기 시작한다. 그리고 그 곳의 대나무를 다 먹어 치우면 상, 하, 좌, 우 중 한 곳으로 이동을 한다. 그리고 또 그곳에서
www.acmicpc.net
https://onlytrying.tistory.com/104 점프 문제와 유사한 유형의 문제였다.
(y,x) 좌표에서 판다가 생존할 수 있는 일수는 항상 같기 때문에 이를 메모이제이션 해주면 중복 탐색을 최소화하게 되어 빠르게 정답을 구할 수 있다.
#include <iostream>
using namespace std;
int N, map[501][501], memo[501][501];
int dy[4] = { -1,1,0,0 };
int dx[4] = { 0,0,-1,1 };
int max(int a, int b) { return a > b ? a : b; }
int Topdown(int startY, int startX)
{
int& ret = memo[startY][startX];
if (ret != 0) return ret;
ret = 1;
for (int i = 0; i < 4; i++)
{
int nextY = startY + dy[i];
int nextX = startX + dx[i];
if (nextY <= N && nextX <= N && map[startY][startX] < map[nextY][nextX])
ret = max(ret, Topdown(nextY, nextX) + 1);
}
return ret;
}
int main(void)
{
cin >> N;
for (int i = 1; i <= N; i++)
for (int j = 1; j <= N; j++)
cin >> map[i][j];
int res = 1;
for (int i = 1; i <= N; i++)
for (int j = 1; j <= N; j++)
res = max(res, Topdown(i, j));
cout << res << endl;
return 0;
}
알고리즘 200일 프로젝트 - 92 day
'알고리즘 > BOJ' 카테고리의 다른 글
백준 1965번: 상자넣기 (0) | 2020.07.06 |
---|---|
백준 6359번: 만취한 상범 (0) | 2020.07.06 |
백준 1309번: 동물원 (0) | 2020.07.05 |
백준 1890번: 점프 (0) | 2020.07.03 |
백준 2225번: 합분해 (0) | 2020.07.03 |