algospot.com :: TRIANGLEPATH
삼각형 위의 최대 경로 문제 정보 문제 6 1 2 3 7 4 9 4 1 7 2 7 5 9 4 위 형태와 같이 삼각형 모양으로 배치된 자연수들이 있습니다. 맨 위의 숫자에서 시작해, 한 번에 한 칸씩 아래로 내려가 맨 아래 ��
www.algospot.com
알고리즘 문제해결전략 책에 나와있는 알고리즘과 동일하게 구현하였다.
핵심은 아래에서 위로 탐색하면서 최대가 되는 값을 선택하는 것이라고 생각한다.
(y,x) 위치에서 아래칸을 선택할 수 있는 경우는 (y+1, x), (y+1, x+1) 두 가지 경우밖에 존재하지 않기 때문에 두 가지 경우 중 가질 수 있는 최대값이 더 큰 쪽을 선택해야 한다.
아래칸이 가질 수 있는 최대값을 알아야 하기 때문에, 맨 아래에서 위로 탐색하는 것이다.
#include <iostream>
#include <cstring>
using namespace std;
int n, triangle[101][101], memo[101][101];
inline int max(const int a, const int b) { return a > b ? a : b; }
int Solution(int y, int x)
{
if (y == n - 1) return triangle[y][x];
int& ret = memo[y][x];
if (ret != -1) return ret;
return ret = max(Solution(y + 1, x), Solution(y + 1, x + 1)) + triangle[y][x];
}
int main(void)
{
int testcase;
cin >> testcase;
while (testcase--)
{
memset(memo, -1, sizeof(memo));
cin >> n;
for (int i = 0; i < n; i++)
for (int j = 0; j <= i; j++)
cin >> triangle[i][j];
cout << Solution(0, 0) << endl;
}
}
알고리즘 200일 프로젝트 - 51 day
'알고리즘 > algospot' 카테고리의 다른 글
알고리즘 문제해결전략 문제8.7 원주율 외우기 (ID: PI) (0) | 2020.05.28 |
---|---|
알고리즘 문제해결전략 문제8.5 합친 LIS (ID: JLIS) (0) | 2020.05.27 |
알고리즘 문제해결전략 문제8.2 와일드카드 (ID: WILDCARD) (0) | 2020.05.25 |
알고리즘 문제해결전략 예제: 외발 뛰기 (ID: JUMPGAME) (0) | 2020.05.22 |
알고리즘 문제해결전략 문제7.4 울타리 잘라내기 (ID: FENCE) (0) | 2020.05.09 |