๋ฌธ์ ๋งํฌ : https://www.acmicpc.net/problem/2579
2579๋ฒ: ๊ณ๋จ ์ค๋ฅด๊ธฐ
๊ณ๋จ ์ค๋ฅด๊ธฐ ๊ฒ์์ ๊ณ๋จ ์๋ ์์์ ๋ถํฐ ๊ณ๋จ ๊ผญ๋๊ธฐ์ ์์นํ ๋์ฐฉ์ ๊น์ง ๊ฐ๋ ๊ฒ์์ด๋ค. <๊ทธ๋ฆผ 1>๊ณผ ๊ฐ์ด ๊ฐ๊ฐ์ ๊ณ๋จ์๋ ์ผ์ ํ ์ ์๊ฐ ์ฐ์ฌ ์๋๋ฐ ๊ณ๋จ์ ๋ฐ์ผ๋ฉด ๊ทธ ๊ณ๋จ์ ์ฐ์ฌ ์๋ ์ ์๋ฅผ ์ป๊ฒ ๋๋ค. ์๋ฅผ ๋ค์ด <๊ทธ๋ฆผ 2>์ ๊ฐ์ด ์์์ ์์๋ถํฐ ์ฒซ ๋ฒ์งธ, ๋ ๋ฒ์งธ, ๋ค ๋ฒ์งธ, ์ฌ์ฏ ๋ฒ์งธ ๊ณ๋จ์ ๋ฐ์ ๋์ฐฉ์ ์ ๋๋ฌํ๋ฉด ์ด ์ ์๋ 10 + 20 + 25 + 20 = 75์ ์ด ๋๋ค. ๊ณ๋จ ์ค๋ฅด๋ ๋ฐ๋ ๋ค์๊ณผ ๊ฐ์ ๊ท์น์ด ์๋ค. ๊ณ๋จ์ ํ ๋ฒ์ ํ ๊ณ๋จ์ฉ
www.acmicpc.net
๋ฌธ์ ๋ถ๋ฅ : ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ https://infinitt.tistory.com/246
์๊ณ ๋ฆฌ์ฆ - ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ (Dynamic Programming)
๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ (Dynamic Programming) : DP ๊ฐ๋
: ๋ฌธ์ ๋ฅผ ๋ ์์ ๋จ์๋ก ์ชผ๊ฐ์ด ํด๊ฒฐํ๋ ์๊ณ ๋ฆฌ์ฆ. (๋ถํ ์ ๋ณต ์๊ณ ๋ฆฌ์ฆ๊ณผ ๋น์ทํ๋ค. ์ฐจ์ด์ ์ ๋ฐ๋ก ์๋ซ์ค.) ํต์ฌ์, ๊ทธ ์์ ๋จ์์ ๋ฌธ์ ๋ค์ด ๋ฐ๋ณตํด์..
infinitt.tistory.com
๊ณ๋จ 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])