1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #include <iostream> #include <algorithm> using namespace std; int main(){ int n; int f[100001]; int dp[100001]; cin >> n; for(int i = 1; i<= n;i++) cin >> f[i]; dp[1] = f[1]; dp[2] = f[1]+f[2]; for(int i = 3; i <=n; i++){ dp[i]= max(dp[i-2]+f[i],dp[i-3]+f[i-1]+f[i]); dp[i] = max(dp[i],dp[i-1]); } cout << dp[n]; } | cs |
점화식 :
i 번째를 마시지 않은 경우 : dp[i] = dp[i-1]
i 번째를 마시고, 그 전 것도 마신 경우 : dp[i] = dp[i-3]+f[i-1]+f[i]
i 번째를 마시고, 그 다음 것을 마실 경우 :dp[i] = dp[i-2] + f[i]
반응형
'프로그래밍 > 문제풀이' 카테고리의 다른 글
백준 2193 (이친수) (0) | 2018.11.06 |
---|---|
백준 10844 (쉬운 계단 수) (0) | 2018.11.06 |
백준 1107 (리모컨) (0) | 2018.11.03 |
백준 1652 (누울 자리를 찾아라) (0) | 2018.11.03 |
백준 9095 (1,2,3 더하기) (0) | 2018.10.31 |