connecting the dots
[BOJ/C++] 2156번 : 포도주 시식 본문
풀이
DP 사용. DP배열 N번째에 최대 양이 나오게 구현.
1. i번째 포도주를 먹고 i-1번째 포도주를 먹은 경우
2. i번째 포도주를 먹고 i-2번째 포도주를 먹은 경우
3. i번째 포도주를 먹지 않고 i-1번째 포도주를 먹은 경우
코드
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
|
#include <stdio.h>
#include <iostream>
#include <cstdio>
using namespace std;
int main(){
int n;
int data[10001], dp[10001];
scanf("%d", &n);
for(int i=1;i<=n;i++){
scanf("%d", &data[i]);
}
dp[1]=data[1];
dp[2]=data[1]+data[2];
for(int i=3;i<=n;i++){
dp[i]=max(data[i]+data[i-1]+dp[i-3], max(data[i]+dp[i-2], dp[i-1]));
}
printf("%d", dp[n]);
}
|
cs |
'algorithm > BOJ' 카테고리의 다른 글
[BOJ/C++] 2667 : 단지번호붙이기 (0) | 2020.12.21 |
---|---|
[BOJ/C++] 2606 : 바이러스 (0) | 2020.12.20 |
[BOJ/C++] 2225번 : 합분해 (0) | 2020.11.09 |
[BOJ/C++] 2579번 : 계단 오르기 (0) | 2020.11.09 |
[BOJ/C++] 11053번 : 가장 긴 증가하는 부분 수열 (0) | 2020.11.08 |