ํฐ์คํ ๋ฆฌ ๋ทฐ
๋ฌธ์
๋ฌธ์ ํ์ด
์ด ๋ฌธ์ ๋ฅผ ํจ์จ์ ์ผ๋ก ํ๊ธฐ ์ํด์๋ ๋ฉ๋ชจ์ด์ ์ด์ (Memoization)์ ํ์ฉํ์ฌ์ผ ํ๋ค. ๋ฌธ์ ์ ์์ ์ ๊ฐ์ด 1 5 6 7์ด ์ ๋ ฅ๋๋ ๊ฒฝ์ฐ ์นด๋ 3๊ฐ ๊น์ง ๊ตฌ๋งคํ ์ ์๋ ๊ฒฝ์ฐ์ ์๋ ๋ค์๊ณผ ๊ฐ๋ค.
- ์นด๋ 1๊ฐ ๊ตฌ๋งค : 1๊ฐ ๋ค์ด์๋ ์นด๋ ํฉ
- ์นด๋ 2๊ฐ ๊ตฌ๋งค : (1๊ฐ ๋ค์ด์๋ ์นด๋ ํฉ) * 2, 2๊ฐ ๋ค์ด์๋ ์นด๋ ํฉ
- ์นด๋ 3๊ฐ ๊ตฌ๋งค : (1๊ฐ ๋ค์ด์๋ ์นด๋ ํฉ) * 3, 2๊ฐ ๋ค์ด ์๋ ์นด๋ ํฉ + 1๊ฐ ๋ค์ด ์๋ ์นด๋๋ฐฑ, 3๊ฐ ๋ค์ด ์๋ ์นด๋ํฉ
- ์ฆ ์นด๋ํฉ์ ๋ ์นด๋ ์์ ์ฆ๊ฐ์ ๋ฐ๋ผ ๊ฒฝ์ฐ์ ์๋ [1], [1 + 1, 2], [1 + 1 + 1, 2 + 1, 3] ์ด ๋๋ค.
์์์์๋ ์นด๋ 2๊ฐ๋ฅผ ๊ตฌ๋งคํ ๊ฒฝ์ฐ, 2์ 5์ ์ค 5์์ด ์ต๋ ๊ฐ์ด๋ฏ๋ก 5์์ ๊ธฐ๋กํ๋ค. ์นด๋ 3๊ฐ๋ฅผ ๊ตฌ๋งคํ ๊ฒฝ์ฐ 1 + 1 + 1์ ์๊ฐํ ํ์๊ฐ ์๋ค. ์๋ํ๋ฉด 1์ ์ ํํ๋ ๊ฒ์ ์ต๋ ๊ฐ์ด ์๋๋ผ๋ ๊ฒ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋ผ์ 6์์ด๋ผ๋ ๊ฐ์ ๊ธฐ๋กํ๋ค. ์ฆ, ์นด๋ํฉ์ ์๊ฐ ์์ ๋ ๋ฐ์ํ๋ ๊ฒฝ์ฐ์ ์์์ ์ต๋ ๊ฐ์ ์ฐพ๊ณ , ์นด๋ ๊ตฌ๋งค ์ ์ฆ๊ฐ์ ๋ฐ๋ผ, ์ด์ ์ ๊ธฐ๋กํด๋ ๊ฐ์ ๋น๊ตํ์ฌ ์ง๋ถํด์ผ ํ๋ ๊ธ์ก์ด ๊ฐ์ฅ ํฐ ๊ฐ์ ์ฐพ์ ์ ์๋ค.
์ฝ๋
if __name__ == '__main__':
N = int(input())
card = [0] + list(map(int, input().split()))
memo = [0] * (N + 1)
memo[1], memo[2] = card[1], max(card[2], card[1] * 2)
for i in range(3, N + 1):
memo[i] = card[i]
for j in range(1, i // 2 + 1):
memo[i] = max(memo[i], memo[j] + memo[i - j])
print(memo[N])
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 10844 ์ฌ์ด ๊ณ๋จ ์ (0) | 2020.06.30 |
---|---|
๋ฐฑ์ค: 16194 ์นด๋ ๊ตฌ๋งคํ๊ธฐ 2 (0) | 2020.06.29 |
๋ฐฑ์ค: 9095 1, 2, 3 ๋ํ๊ธฐ (0) | 2020.06.29 |
๋ฐฑ์ค: 11727 2xn ํ์ผ๋ง 2 (0) | 2020.06.28 |
๋ฐฑ์ค: 11726 2xn ํ์ผ๋ง (0) | 2020.06.28 |