문제 설명
https://www.acmicpc.net/problem/1932
1932번: 정수 삼각형
첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1번째 줄까지 정수 삼각형이 주어진다.
www.acmicpc.net
해결 방법
dp문제이다.
두번째 줄부터 검사할 것이다
제일 왼쪽에 있는 경우면 오른쪽 위 대각선 숫자를 더해준다.
제일 오른쪽에 있는 경우면 왼쪽 위 대각섯 숫자를 더해준다.
그 외는 양쪽 대각선 위치에 있는 숫자 중 더 큰것을 더해준다.
마지막 줄에서 가장 큰 수를 구해준다.
#include<iostream>
#include<vector>
using namespace std;
int max(int a, int b)
{
if (a > b)return a;
return b;
}
int main()
{
//INPUT
int n; cin >> n;
vector < vector<int >> triangle(n, (vector<int>(n, -1)));
for (int i = 0; i < n; i++)
{
for (int j = 0; j < i + 1;j++)
{ cin >> triangle[i][j]; }
}
//SEARCH
for (int i = 1; i < n; i++)
{
for (int j = 0; j <= i; j++)
{
//오른쪽 대각선만 검사
if (j == 0) { triangle[i][j] += triangle[i - 1][j]; }
//왼쪽 대각선만 검사
else if (j == i) { triangle[i][j] += triangle[i - 1][j-1]; }
//양쪽 대각선 검사
else { triangle[i][j] += max(triangle[i - 1][j - 1], triangle[i - 1][j]); }
}
}
int maxResult = triangle[n - 1][0];
for (int i = 1; i < n; i++)
{
if (maxResult < triangle[n-1][i])
{ maxResult = triangle[n - 1][i]; }
}
cout << maxResult;
}
'개발 > 백준' 카테고리의 다른 글
[백준] 12018번. Yonsei TOTO (C++) (1) | 2024.01.06 |
---|---|
[백준] 14501번. 퇴사 (C++) (4) | 2024.01.05 |
[백준] 1149번. RGB거리 (C++) (0) | 2024.01.02 |
[백준] 1003번. 피보나치 함수 (C++) (0) | 2023.12.27 |
[백준] 19941번. 햄버거 분배 (1) | 2023.12.26 |