다이나믹프로그래밍(DP)
백준 1932번: 정수 삼각형
cepiloth
2020. 11. 26. 18:30
반응형
https://www.acmicpc.net/problem/1932
키워드 - 다이나믹프로그래밍, 구현
#include <iostream>
#include <sstream>
#include <string>
#include <algorithm>
#include <functional>
#include <vector>
#include <list>
#include <queue>
#include <deque>
#include <map>
#include <set>
#include <stack>
#include <math.h>
#include <memory.h>
using namespace std;
#define MAX_SIZE 100
#define INF 0x7fffffff
#define CENDL "\n"
#define ll long long
#define c_reverse(s) reverse(s.begin(), s.end())
#define c_sort(s) sort(s.begin(), s.end())
#define print_vector(v) for(int i=0; i<v.size(); i++) cout << v[i];
int dp[501][501];
int main() {
cin.tie(0);
std::ios::sync_with_stdio(false);
int n; cin >> n;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) {
cin >> dp[i][j];
}
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) {
if (j == 1) {
// 첫번째 인덱스 일때는 참조할 값이 윗 인덱스 최 좌측 값
dp[i][j] += dp[i - 1][j];
}
else if(j==n){
// 인덱스가 n 일 경우 참조할 값이 윗 인덱스 최 우측 값
dp[i][j] += dp[i - 1][j-1];
}
else {
// 상위 인덱스에서 가장 큰 값을 참조
dp[i][j] += max(dp[i - 1][j], dp[i - 1][j - 1]);
}
}
}
int sol = 0;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) {
sol = max(sol, dp[i][j]);
}
}
cout << sol << CENDL;
return 0;
}
반응형