https://programmers.co.kr/learn/courses/30/lessons/43105
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int solution(vector<vector<int>> triangle) {
int answer = -1;
vector<vector<int>> dp(triangle.size(), vector<int>(triangle.size()));
dp[0][0] = triangle[0][0];
for (int i = 1; i < triangle.size(); i++)
{
for (int j = 0; j <= i; j++)
{
if (j == 0) dp[i][j] = dp[i - 1][j] + triangle[i][j];
else if(j==i) dp[i][j] = dp[i-1][j-1] + triangle[i][j];
else
{
dp[i][j] = max(dp[i - 1][j - 1] + triangle[i][j], dp[i - 1][j] + triangle[i][j]);
}
if (i == triangle.size() - 1) answer = max(answer, dp[i][j]);
}
}
return answer;
}
점화식 :
1. dp[0][0]일 땐 삼각형 맨 꼭대기;
2. 삼각형 맨 좌측일때 dp = 바로 위에 dp + 현재줄 triangle값
3. 삼각형 맨 우측일때 dp = 좌측 대각선 위에 dp + 현재줄 triangle값
4. 나머지 경우 : max(현재줄 triangle값 + 좌측상단 dp / 현재줄 triangle값 + 우측상단 dp)