728x90
https://www.acmicpc.net/problem/1932
1932번: 정수 삼각형
문제 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 위 그림은 크기가 5인 정수 삼각형의 한 모습이다. 맨 위층 7부터 시작해서 아래에 있는 수 중 하나를 선택하여 아래층으로 내려올 때, 이제까지 선택된 수의 합이 최�
www.acmicpc.net
동적계획법 C++
숫자 트리에서 숫자들의 합이 최대가 되는 경로 구하기(최댓값 출력)
접근방법
전형적인 DP 상향식 풀이로 풀었다.
가장 밑 행부터 모든 숫자에 대해 해당 자리까지의 최댓값을 저장해가면서 값을 갱신한다.
예를들어 위의 사진에서 4번째 행 첫번째 자리 2에서 최댓값을 가지려면 4,5중 5를 선택해야하니까
원래 2가 있던 자리에 2+5 = 7을 저장한다. 두번째 자리인 7도 마찬가지로 5,2중에 5를 선택해서 7+5 = 12를 저장한다.
그렇게 맨 위까지 반복하면 결국 첫행 첫열에는 최댓값이 저장되게 된다.
이번 문제는 로직 정리하고 바로 코드 작성해서 완료까지 20분 정도 밖에 안걸렸다.
로직 정리하는데에도 그렇게 시간이 걸리진 않아서 굉장히 빨리 푼 것 같다.
전형적인 DP 풀이로 풀이되는 문제라 그런 것 같다.
소스코드
#include <iostream>
using namespace std;
int main(){
int n;
cin >> n;
int integers[500][500];
for(int i = 0 ; i < n ; i++){
for(int j = 0 ; j <= i ; j++){
cin >> integers[i][j];
}
}
for(int i = n-2 ; i >= 0 ; i--){
for(int j = 0 ; j <= i ; j++){
integers[i][j] += max(integers[i+1][j], integers[i+1][j+1]);
}
}
cout << integers[0][0];
return 0;
}
728x90
'알고리즘 문제풀이' 카테고리의 다른 글
[백준 1463] 알고리즘 43일차 : 1로 만들기 (0) | 2020.08.13 |
---|---|
[백준 2579] 알고리즘 42일차 : 계단 오르기 (0) | 2020.08.12 |
[백준 1874] 알고리즘 39일차 : 스택 수열 (0) | 2020.08.07 |
[백준 4949] 알고리즘 38일차 : 균형잡힌 세상 (0) | 2020.08.06 |
[백준 9012] 눈물겨운 알고리즘 37일차 : 괄호 (0) | 2020.08.05 |