Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- C언어
- 숙명여자대학교 정보보안 동아리
- XSS Game
- Sookmyung Information Security Study
- PHP 웹페이지 만들기
- 웹페이지 만들기
- 자료구조 복습
- lob
- WarGame
- 파이썬
- SWEA
- 풀이
- c++
- hackctf
- CSS
- BOJ
- 기계학습
- hackerrank
- Javascript
- 드림핵
- 숙명여자대학교 정보보안동아리
- 백준
- 생활코딩
- 머신러닝
- c
- The Loard of BOF
- HTML
- siss
- Python
- BOJ Python
Archives
- Today
- Total
혜랑's STORY
[BOJ_C++] 1932번 : 정수 삼각형 본문
code
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <algorithm>
#include <cstring>
#include <stack>
#include <vector>
#include <cmath>
using namespace std;
int dp[500][500] = { 0 };
int tree[500][500] = { 0 };
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int n; cin >> n;
for (int i = 0; i < n; i++) {
for (int j = 0; j <= i; j++) {
cin >> tree[i][j];
dp[i][j] = tree[i][j];
}
}
for (int i = n - 2; i >= 0; i--) {
for (int j = 0; j <= i; j++) {
dp[i][j] = (dp[i + 1][j] > dp[i + 1][j + 1]) ? dp[i + 1][j] + tree[i][j] : dp[i + 1][j + 1] + tree[i][j];
}
}
printf("%d", dp[0][0]);
return 0;
}
- 맨 위층부터 시작하여 아래에 있는 수 중 대각선 왼쪽 또는 대각선 오른쪽에 있는 것과의 최대 합을 구하는 것은 크기가 2인 삼각형의 맨 아래층 수 중 왼쪽 또는 오른쪽 값 중 더 큰 값을 맨 위층 수와 더하는 것의 반복이다.
i층 j번째 값 | |
i+1층 j값 | i+1층 j+1 값 |
- 다시말해 dp i층의 j번째 값을 구하기 위해서는 dp i+1층의 j값과 j+1값 중 더 큰 값을 tree i층 j번째 값과 더해주면 된다.
- 최종적으로 구해진 dp[0][0]의 값은 최대 합을 구한 것과 같다. 따라서 dp[0][0]을 출력하고 프로그램을 종료한다.
결과
'무지성 공부방 > 알고리즘 해결' 카테고리의 다른 글
[BOJ_C++] 18512번 : 점프 점프 (0) | 2021.08.08 |
---|---|
[BOJ_C++] 2078번 : 무한이진트리 (0) | 2021.08.06 |
[BOJ_C++] 9445번 : 스티커 (0) | 2021.08.06 |
[BOJ_C++] 9372번 : 상근이의 여행 (0) | 2021.08.06 |
[BOJ_C++] 11725번 : 트리의 부모 찾기 (0) | 2021.08.06 |