https://www.acmicpc.net/problem/2579



마지막을 생각하면 편합니다.


마지막을 밟고, 그 전 칸을 밟은 경우 : dp[n] = dp[n-3] + arr[n] + arr[n-1]

마지막을 밟고, 그 전 전 칸을 밟은 경우: dp[n] = dp[n-2]+arr[n]


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <algorithm>
using namespace std;
 
int main(){
    int n,tmp;
    int dp[301= {0};
    int arr[301];
    
    cin >> n;
    for(int i = 1; i <= n; i++)
        cin >> arr[i];
    
    dp[1= arr[1];
    dp[2= arr[1]+arr[2];
    dp[3= max(arr[1]+arr[3], arr[2]+arr[3]);
    
    for(int i = 4; i <= n; i++)
        dp[i] = max(dp[i-2]+arr[i], dp[i-3]+arr[i]+arr[i-1]);
    
    cout << dp[n];
}
cs


반응형

'프로그래밍 > 문제풀이' 카테고리의 다른 글

[dp] 백준 1495 기타리스트  (0) 2019.02.20
[dp] 백준 1309 동물원  (0) 2019.02.02
[etc] 백준 10757 큰 수 A+B  (0) 2019.01.29
[etc] 백준 16678 모독  (0) 2019.01.27
[etc] 백준 16676 근우의 다이어리 꾸미기  (0) 2019.01.24

+ Recent posts