DP에 대해서 공부해보자!
나올 수 있는 모든 경우의 수를 계산한다.! 하지만 옛 결과를 가지고 계산을 한다!
위 피라미드 문제가 DP에 대해서 학습하기는 편한거 같다.
위의 값에 대해서 왼쪽을 더했을때, 오른쪽을 더했을 때의 값 중 큰 값을 넣으면 된다.
눈에 보이는 대로 구현하자!
#include <iostream>
using namespace std;
const int MAX = 500;
int pyramid[MAX][MAX + 1];
int main()
{
int n;
cin >> n;
for (int i = 0; i < n; i++)
for (int j = 0; j <= i; j++)
cin >> pyramid[i][j];
for (int i = 1; i < n; i++)
{
for (int j = 0; j <= i; j++)
{
if (j == 0)
pyramid[i][j] += pyramid[i - 1][j];
else
pyramid[i][j] += pyramid[i - 1][j - 1] < pyramid[i - 1][j] ? pyramid[i - 1][j] : pyramid[i - 1][j - 1];
}
}
int max = 0;
for (int i = 0; i < n; i++)
for (int j = 0; j <= i; j++)
if (pyramid[i][j] > max)
max = pyramid[i][j];
cout << max;
return 0;
}
2019-01-12 13:00:00에 Tistory에서 작성되었습니다.