티스토리 뷰
문제
출처 : https://www.acmicpc.net/problem/2156
풀이과정
DP[i] 를 i번째 포도주 잔까지 최대로 마실 수 있는 양이라 한다.
이 문제는 3가지의 경우로 나누어서 생각한다.
1. 현재 포도주를 마시지 않는 경우
2. 현재 포도주를 마시고 이전 포도주를 마시지 않는 경우 ( o x o )
3. 현재 포도주와 이전 포도주를 마시는 경우 ( x o o )
3가지의 경우 중 가장 큰 값을 찾는다.
소스코드
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 | #include <iostream> #include <algorithm> using namespace std; int DP[10001], wine[10001]; int main() { int n; cin >> n; for (int i = 1; i <= n; i++) { cin >> wine[i]; } for (int i = 1; i <= n; i++) { int ans = 0; if (i <= 2) DP[i] = wine[i] + wine[i - 1]; // DP[1] , DP[2] 초기화 ans = max(DP[i - 1], // 현재 포도주를 마시지 않는 경우 max(wine[i] + DP[i - 2], // 현재 포도주를 마시고 이전 포도주를 마시지 않는 경우 DP[i - 3] + wine[i] + wine[i - 1])); // 현재 포도주와 이전 포도주를 마시는 경우 DP[i] = ans; } cout << DP[n]; return 0; } | cs |
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 11055번 가장 큰 증가 부분 수열 (0) | 2017.12.05 |
---|---|
[백준] 2579번 계단 오르기 (0) | 2017.12.01 |
[백준] 9095번 1, 2, 3 더하기 (0) | 2017.11.30 |
[백준] 10164번 격자상의 경로 (0) | 2017.11.29 |
[백준] 10163번 색종이 (0) | 2017.11.28 |