https://programmers.co.kr/learn/courses/30/lessons/43105
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
const int MAX = 500;
int D[MAX + 1][MAX + 1];
int solution(vector<vector<int>> triangle) {
int N = triangle.size();
/*
점화식 :
D[i][j] = tri[i][j]로 올 수 있는 경로의 i - 1번째 최대값
+ tri[i][j]
*/
for (int i = 1; i <= N; ++i)
{
for (int j = 1; j <= i; ++j)
{
D[i][j] = max(D[i - 1][j - 1], D[i - 1][j]) + triangle[i - 1][j - 1];
}
}
// 최대값 구하기
int max_sum = 0;
for (int i = 1; i <= N; ++i)
{
max_sum = max(D[N][i] , max_sum);
}
return max_sum;
}
BOJ 1932 정수 삼각형 문제와 동일하다
다만 입력을 직접 받는게 아니라서,
위 풀이로 풀때에는 triangle 값을 더해줄때 인덱스를 한칸 뒤로 밀어줘야 한다.
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스]탐욕법(Greedy) : 섬 연결하기 (level 3)(c++) (0) | 2020.06.18 |
---|---|
[프로그래머스]동적계획법(Dynamic Programming) : 등굣길 (level 3)(c++) (0) | 2020.06.18 |
[프로그래머스]동적계획법(Dynamic Programming) : 타일 장식물 (level 3)(c++) (0) | 2020.06.16 |
[프로그래머스]동적계획법(Dynamic Programming) : N으로 표현 (level 3) (c++) (0) | 2020.06.02 |
[프로그래머스]2018 KAKAO BLIND RECRUITMENT : n진수 게임(level 2)(c++) (0) | 2020.05.26 |
댓글