๋ฌธ์ ๋งํฌ : https://www.acmicpc.net/problem/2579
๋ฌธ์ ๋ถ๋ฅ : ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ https://infinitt.tistory.com/246
๊ณ๋จ 3์นธ๊น์ง๋ ๋ช
ํํ๋ค.
๊ณ๋จ i์นธ๊น์ง ์ค๋ฅผ๋์ ์ต๋๊ฐ์ dp[i] ๋ผ๊ณ ๋๊ณ
๋ฌธ์ ์ ์
๋ ฅ(ํด๋น ๊ณ๋จ์ ์ซ์)๋ฅผ arr[k] ๋ผ๊ณ ๋์ผ๋ฉด
dp [1] = arr[1]
dp [2] = arr[1] + arr[2]
dp [3] = max(arr[1] + arr[3] ,arr[2] + arr[3])
4์นธ์งธ ๋ถํฐ๋ ์๊ฐ์ ์กฐ๊ธ ๋ ํด์ผ๋๋ค. (3์นธ ์ฐ์๋๋ ๊ณ๋จ์ ๋ฐ์์ ์๋ค๋ ์กฐ๊ฑด๋๋ฌธ์)
1. dp[i] = dp[i-2] + arr[i] -> i์นธ์ ๋ฐ๊ธฐ ์ ์ ์นธ์ด i-2์ด๋ฏ๋ก 3์นธ ์ฐ์๋ฐ์์ผ์ ์๋ค.
2. dp[i] = dp[i-1] + arr[i] -> i์นธ ์ด์ ์ i-1 ์นธ์ ๋ฐ์์ผ๋ฏ๋ก, 3์นธ ์ฐ์์ผ ๊ฐ๋ฅ์ฑ์ด ์กด์ฌํ๋ค.
๋ฐ๋ผ์ 2๋ฒ ์ ํ์์ ๋ฐ๊ฟ์ค์ผ ํ๋ค. ํ์นธ ์ ์ dp๊ฐ ์๋, 3์นธ ์ ์ dp๋ก ์ด๋์ํจ๋ค์ ๋ง์ง๋ง์นธ์ ์
ํ๋ก ๋ํด์ฃผ๋ฉด 3์นธ ์ฐ์์ผ ๊ฐ๋ฅ์ฑ์ ์์จ์ ์๋ค.
์ฌ๋ฐ๋ฅธ 2๋ฒ ์ ํ์ : dp[i] = dp[i-3] + arr[i-1] + arr[i]
๊ฒฐ๊ตญ ์ต์ข
์ ํ์์ 1๊ณผ 2์ค ํฐ๊ฐ์ด ๋๋ฏ๋ก dp[i] = max ( dp[i-2] + arr[i] , dp[i-3] + arr[i-1] + arr[i] ) ๊ฐ ๋๋ค.
*์ ๋ต ์ฝ๋(Python)
import sys
input = sys.stdin.readline
N = int(input())
dp = [0 for _ in range(N+3)]
arr = [0 for _ in range(N+3)]
for k in range(1,N+1):
arr[k] = int(input())
dp [1] = arr[1]
dp [2] = arr[1] + arr[2]
dp [3] = max(arr[1] + arr[3] ,arr[2] + arr[3])
for i in range(4, N+1):
dp[i] = max( dp[i-3] + arr[i-1] + arr[i] , dp[i-2] + arr[i] )
print(dp[N])