본문 바로가기
백준 문제 풀이 & C++ 공부

백준 1932 C++

by daisy0461 2025. 3. 27.
#include <bits/stdc++.h>

using namespace std;

int n;

//현재 층에서 선택된 수의 대각선 왼쪽 또는 대각선 오른쪽에 있는 것 중에서만 선택할 수 있다.
// = arr로 봤을 땐 i or i+1 이다.
int arr[510][510];
int dp[510][510];

int main()
{
	ios_base::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);

	cin >> n;

	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= i; j++) {
			cin >> arr[i][j];
		}
	}

	dp[1][1] = arr[1][1];

	for (int i = 1; i <= n-1; i++) {		//층을 나타낸다. (위에서 부터)
		for (int j = 1; j <= i; j++) {
			dp[i + 1][j] = max(dp[i + 1][j], dp[i][j] + arr[i + 1][j]);
			dp[i + 1][j + 1] = max(dp[i + 1][j + 1], dp[i][j] + arr[i + 1][j + 1]);
		}
	}


	int result = -1e9;
	for (int i = 1; i <= n; i++) {
		result = max(result, dp[n][i]);
	}

	cout << result;

}

다음 층에 있는건 현재 index와 index + 1이기에 다음과 같이 해서 성공했다.

'백준 문제 풀이 & C++ 공부' 카테고리의 다른 글

백준 11054 C++  (0) 2025.04.01
백준 10844 C++  (0) 2025.03.30
백준 1149 C++  (0) 2025.03.27
백준 1940 C++  (0) 2025.03.27
백준 11066 C++  (0) 2025.03.26