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 |