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++
- c
- hackctf
- 웹페이지 만들기
- Python
- BOJ Python
- BOJ
- XSS Game
- 풀이
- 기계학습
- WarGame
- HTML
- 자료구조 복습
- 생활코딩
- C언어
- 백준
- The Loard of BOF
- SWEA
- hackerrank
- Sookmyung Information Security Study
- lob
- Javascript
- CSS
- siss
- 드림핵
- 숙명여자대학교 정보보안 동아리
- PHP 웹페이지 만들기
- 파이썬
- 숙명여자대학교 정보보안동아리
Archives
- Today
- Total
혜랑's STORY
[BOJ_C++] 2096번 : 내려가기 본문
code
#define _CRT_SECURE_NO_WARNINGS
#include <bits/stdc++.h>
using namespace std;
int maxdp[3][2];
int mindp[3][2];
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int n, temp1, temp2, temp3; cin >> n;
maxdp[0][0] = maxdp[1][0] = maxdp[2][0] = 0;
mindp[0][0] = mindp[1][0] = mindp[2][0] = 0;
for (int i = 1; i <= n; i++) {
cin >> temp1 >> temp2 >> temp3;
maxdp[0][1] = max(maxdp[0][0], maxdp[1][0]) + temp1;
maxdp[1][1] = max(maxdp[0][0], max(maxdp[1][0], maxdp[2][0])) + temp2;
maxdp[2][1] = max(maxdp[1][0], maxdp[2][0]) + temp3;
maxdp[0][0] = maxdp[0][1];
maxdp[1][0] = maxdp[1][1];
maxdp[2][0] = maxdp[2][1];
mindp[0][1] = min(mindp[0][0], mindp[1][0]) + temp1;
mindp[1][1] = min(mindp[0][0], min(mindp[1][0], mindp[2][0])) + temp2;
mindp[2][1] = min(mindp[1][0], mindp[2][0]) + temp3;
mindp[0][0] = mindp[0][1];
mindp[1][0] = mindp[1][1];
mindp[2][0] = mindp[2][1];
}
cout << max(maxdp[0][1], max(maxdp[1][1], maxdp[2][1])) << " " << min(mindp[0][1], min(mindp[1][1], mindp[2][1]));
return 0;
}
- 각 위치에 올 수 있는 전 값들의 최소와 최대 값들을 계산하고 값과 더해주는 문제였다.
- 0번째 위치로 올 수 있는 경우는 전에 0번이나 1번에 있을 때이고, 1번에 올 수 있는 경우는 모든 경우, 3번에 올 수 있는 경우는 1번이나 2번에 있을 때이다.
- 이 문제에서 특이한 점은 주어진 메모리가 4MB로 매우 작다는 것이다. 따라서 dp의 모든 값을 기억하고 있는 것이 아닌 전 값만 기억하는 방법을 사용하였고, 최대 최소 값을 계산한 뒤 이전 값에 옮겨 넣어주었다. (옮겨 넣는 이유는 다음 값을 계산할때 이전 값이 아닌 앞에서 계산한 값이 들어갈 수 있기 때문)
결과
'무지성 공부방 > 알고리즘 해결' 카테고리의 다른 글
[BOJ_C++] 2292번 : 벌집 (0) | 2021.08.22 |
---|---|
[BOJ_C++] 1780번 : 종이의 개수 (0) | 2021.08.22 |
[BOJ_C++] 9663번 : N-Queen (0) | 2021.08.18 |
[BOJ_C++] 12852번 : 1로 만들기 2 (0) | 2021.08.18 |
[BOJ_C++] 2503번 : 숫자 야구 (0) | 2021.08.17 |