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

728x90
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

 

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

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

www.acmicpc.net

 

๋ฌธ์ œ ํ’€์ด

 ์นด๋“œ ๊ตฌ๋งคํ•˜๊ธฐ์—์„œ๋Š” ๊ตฌ๋งคํ•˜๊ณ ์ž ํ•˜๋Š” ์นด๋“œ๋ฅผ ์ตœ๋Œ€๊ฐ’์œผ๋กœ ๊ตฌ๋งคํ•˜๋Š” ๋ฌธ์ œ์˜€๋‹ค. ์ด์™€ ๋‹ฌ๋ฆฌ ์นด๋“œ ๊ตฌ๋งคํ•˜๊ธฐ 2๋Š” ๊ฐ€์žฅ ์ตœ์†Œ ๊ฐ’์œผ๋กœ ์นด๋“œ๋ฅผ ๊ตฌ๋งคํ•  ๊ฒฝ์šฐ์— ๋ฐœ์ƒํ•˜๋Š” ๊ธˆ์•ก์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค. ์นด๋“œ ๊ตฌ๋งคํ•˜๊ธฐ์™€ ๋™์ผํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ํ’€๋ฉฐ, ์•ฝ๊ฐ„์˜ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๋ฉด ์ด ๋ฌธ์ œ๋„ ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ๋‹ค.

 

์ฝ”๋“œ

if __name__ == '__main__':
    N = int(input())
    card = [0] + list(map(int, input().split()))

    memo = [0] * (N + 1)
    memo[1], memo[2] = card[1], min(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] = min(memo[i], memo[j] + memo[i - j])
    print(memo[N])

 ์ตœ๋Œ€๊ฐ’์„ ์ฐพ๋Š” ๊ฒƒ์ด ์•„๋‹Œ, ์ตœ์†Ÿ๊ฐ’์„ ์ฐพ์•„์•ผ ํ•˜๋ฏ€๋กœ max๋ฅผ min์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด ๋œ๋‹ค.

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