๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

study money ๐Ÿ‘บ

[๋ฐฑ์ค€] 12865๋ฒˆ: ํ‰๋ฒ”ํ•œ ๋ฐฐ๋‚ญ( ํŒŒ์ด์ฌ, ์‰ฌ์šด ์„ค๋ช…, ์ฝ”๋ฆฐ์ด ๋ฒ„์ „ ) *๋น„๋ฒ”ํ•œ ๋ฐฐ๋‚ญ ์ฃผ์˜

www.acmicpc.net/problem/12865

 

12865๋ฒˆ: ํ‰๋ฒ”ํ•œ ๋ฐฐ๋‚ญ

์ฒซ ์ค„์— ๋ฌผํ’ˆ์˜ ์ˆ˜ N(1 ≤ N ≤ 100)๊ณผ ์ค€์„œ๊ฐ€ ๋ฒ„ํ‹ธ ์ˆ˜ ์žˆ๋Š” ๋ฌด๊ฒŒ K(1 ≤ K ≤ 100,000)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋‘ ๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— ๊ฑฐ์ณ ๊ฐ ๋ฌผ๊ฑด์˜ ๋ฌด๊ฒŒ W(1 ≤ W ≤ 100,000)์™€ ํ•ด๋‹น ๋ฌผ๊ฑด์˜ ๊ฐ€์น˜ V(0 ≤ V ≤ 1,000)

www.acmicpc.net

 ๋งค์šฐ ๋งค์šฐ ๋งค์šฐ ๋งค์šฐ ์–ด๋ ค์šด ๋ฌธ์ œ์˜€์Šต๋‹ˆ๋‹ค. ์ €ํ•œํ…Œ๋Š”.

๋ฌธ์ œ ์ œ๋ชฉ์ด ๋งค์šฐ ์—ญ์„ค์ ์œผ๋กœ ์ž๊ดด๊ฐ ๋Š๋ผ๊ฒŒ ํ•˜๊ณ  ใ…‹ใ…‹ใ…‹ ๋ˆ„๊ฐ€ ์ด๊ฒŒ ๋””ํ”ผ์˜ ์ „ํ˜•์ ์ธ ๋ฌธ์ œ๋ผ๊ณ  ํ•ด์„œ ๋” ์ž๊ดด๊ฐ์„ ๋Š๊ผˆ์Šต๋‹ˆ๋‹ค.

 ํ•˜์ง€๋งŒ, ์ž๊ดด๊ฐ์„ ๋Š๋ผ๋Š” ๊ฒƒ๋„ ์ด์ œ ์ต์ˆ™ํ•ด์„œ, ์ €ํ•ญ์ด ์ƒ๊ฒจ๊ฐ€๋„ค์š”.

๋งŽ์€ ์‹œ๊ฐ„์„ ๋“ค์—ฌ์„œ, ๊ฒฐ๊ตญ ์ดํ•ด๋ฅผ ํ•˜๊ณ  ์—ฌ๋Ÿฌ๋ถ„์—๊ฒŒ ์ „๋‹ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

 

 

< ์ฝ”๋ฆฐ์ด๋ฅผ ์œ„ํ•œ ์‰ฝ๊ฒŒ ์„ค๋ช…ํ•œ ํ•ต์‹ฌ ์•„์ด๋””์–ด > 

1. ์šฐ์„  ์ด๋ถ„์˜ ์„ค๋ช…์„ ์ฝ๊ณ  ์™€ ์ฃผ์„ธ์š” !! ์ •๋ง ์„ค๋ช…์„ ์ฐจ๊ทผ ์ฐจ๊ทผ ์ž˜ ํ•ด์ฃผ์…จ๋”๋ผ๊ตฌ์š”.

suri78.tistory.com/2

 

[๋ฐฑ์ค€์•Œ๊ณ ๋ฆฌ์ฆ˜] 12865๋ฒˆ: ํ‰๋ฒ”ํ•œ ๋ฐฐ๋‚ญ -Python

[๋ฐฑ์ค€์•Œ๊ณ ๋ฆฌ์ฆ˜] 12865๋ฒˆ: ํ‰๋ฒ”ํ•œ ๋ฐฐ๋‚ญ -Python https://www.acmicpc.net/problem/12865 12865๋ฒˆ: ํ‰๋ฒ”ํ•œ ๋ฐฐ๋‚ญ ์ฒซ ์ค„์— ๋ฌผํ’ˆ์˜ ์ˆ˜ N(1 ≤ N ≤ 100)๊ณผ ์ค€์„œ๊ฐ€ ๋ฒ„ํ‹ธ ์ˆ˜ ์žˆ๋Š” ๋ฌด๊ฒŒ K(1 ≤ K ≤ 100,000)๊ฐ€ ์ฃผ์–ด์ง„..

suri78.tistory.com

2. ์ €๋Š” 1๋ฒˆ ์ž๋ฃŒ์— ์กฐ๊ธˆ ๋” ์ง๊ด€์ ์ธ ์„ค๋ช…์„ ๋ง๋ถ™์ด๊ฒ ์Šต๋‹ˆ๋‹ค.

ํ™•๋Œ€ํ•ด์„œ ํ™•์ธํ•˜์‹œ๋ฉด, ์„ค๋ช…์ด ๋” ์ง๊ด€์ ์œผ๋กœ ๋‹ค๊ฐ€์˜ฌ ๊ฑฐ์—์š”.

 

 

๋ฐ‘์˜ ์ฝ”๋“œ๋Š” ์œ„์— ๋‚˜์˜ค๋Š” ์•„์ด๋””์–ด๋ฅผ ์ฝ”๋“œ๋กœ ํ‘œํ˜„ํ•œ ๊ฒ๋‹ˆ๋‹ค.

์กฐ๊ธˆ ์ž์„ธํžˆ ์ผ์Šต๋‹ˆ๋‹ค.

#
n, k = map(int, input().split())

# ์•„์ดํ…œ์˜ ์ธ๋ฑ์Šค - (๋ฌด๊ฒŒ, ๊ฐ€์น˜) ํŠœํ”Œ ์‚ฌ์ „
dic = {} 
for i in range(n) :
    w, v = map( int, input().split() )
    dic[i] = (w, v)

print(dic)
# {0: (6, 13), 1: (4, 8), 2: (3, 6), 3: (5, 12)}


# ์นผ๋Ÿผ์˜ ๊ฒฝ์šฐ ๋ฌดํšจ์นธ์„ ๋งจ ์•ž์— ์‚ฝ์ž…ํ•˜์—ฌ, ์นผ๋Ÿผ ๊ฐ’์ด ์‹ค์ œ ๋ฌด๊ฒŒ์™€ ๊ฐ™์ด ํ˜•์„ฑ๋˜๊ฒŒ ๋งŒ๋“ฌ
lst = [ [0] * (k+1) for _ in range(n) ]

# lst
# [0, 0, 0, 0, 0, 0, 0, 0]
# [0, 0, 0, 0, 0, 0, 0, 0]
# [0, 0, 0, 0, 0, 0, 0, 0]
# [0, 0, 0, 0, 0, 0, 0, 0]
    
# dynamic programming ์„ ์œ„ํ•ด, ์ฒซ ๋ฒˆ์งธ ํ–‰ ์„ค์ •
firstTuple = dic[0]
firstW, firstV = firstTuple

# ์ฒซ๋ฒˆ์งธ ์นผ๋Ÿผ 1 ~ ๋ฌด๊ฒŒ ํ•œ๋„๊นŒ์ง€ ๊ฐ’ ์ดˆ๊ธฐํ™”
for i in range(1, k+1) :
    if firstW <= i :
        lst[0][i] = firstV
    else :
        lst[0][i] = 0

# lst
# [0, 0, 0, 0, 0, 0, 13, 13]
# [0, 0, 0, 0, 0, 0, 0, 0]
# [0, 0, 0, 0, 0, 0, 0, 0]
# [0, 0, 0, 0, 0, 0, 0, 0]


# dynamic programming ์‹ค์‹œ
    # ์ด๋ฒˆ ํ•ญ๋ชฉ์„ ํฌํ•จํ•  ์ˆ˜ ์—†๋‹ค๋ฉด, ์ด์ „ ํ•ญ๋ชฉ์„ ํฌํ•จํ•œ ๊ฒƒ ๊นŒ์ง€์˜ ์ตœ๋Œ“๊ฐ’ ์ทจํ•˜๊ธฐ
    # ์ด๋ฒˆ ํ•ญ๋ชฉ์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด
        # 1. ํ•  ์ˆ˜ ์žˆ์–ด๋„ ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ
        # 2. ํฌํ•จํ•˜๊ณ , ์ •ํ•ด์ง„ ๋ฌด๊ฒŒํ•œ๋„๋กœ๋ถ€ํ„ฐ, ์ด๋ฒˆ ํ•ญ๋ชฉ์˜ ๋ฌด๊ฒŒ๋ฅผ ์ œ์™ธํ•˜๊ณ , ์ด์ „ ํ•ญ๋ชฉ๊นŒ์ง€์˜ ํ•ด๋‹น ๋ฌด๊ฒŒ ์‹œ์˜ ์ตœ๋Œ“๊ฐ’ 
            # : value + lst[r-1][c-weight]
            
for r in range(1,n) :
    weight, value = dic[r]
    for c in range(1,k+1):
        if weight <= c :
            lst[r][c] = max(
                              lst[r-1][c],
                              value + lst[r-1][c-weight]  
                                                            )
        else :
            lst[r][c] = lst[r-1][c]
        
# lst 
#[[0, 0, 0, 0, 0, 0, 13, 13],
#[0, 0, 0, 0, 8, 8, 13, 13],
#[0, 0, 0, 6, 8, 8, 13, 14],
#[0, 0, 0, 6, 8, 12, 13, 14]]

# dp array์˜ ๋งˆ์ง€๋ง‰ ์—”ํŠธ๋ฆฌ ํ”„๋ฆฐํŠธ
print( lst[-1][-1] )