ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

728x90
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

 

11052๋ฒˆ: ์นด๋“œ ๊ตฌ๋งคํ•˜๊ธฐ

์ฒซ์งธ ์ค„์— ๋ฏผ๊ทœ๊ฐ€ ๊ตฌ๋งคํ•˜๋ ค๊ณ  ํ•˜๋Š” ์นด๋“œ์˜ ๊ฐœ์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N ≤ 1,000) ๋‘˜์งธ ์ค„์—๋Š” Pi๊ฐ€ P1๋ถ€ํ„ฐ PN๊นŒ์ง€ ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ Pi ≤ 10,000)

www.acmicpc.net

 

๋ฌธ์ œ ํ’€์ด

 ์ด ๋ฌธ์ œ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ํ’€๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฉ”๋ชจ์ด์ œ์ด์…˜(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])

 

728x90
๋ฐ˜์‘ํ˜•
๋Œ“๊ธ€
๊ธ€ ๋ณด๊ด€ํ•จ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€