less than 1 minute read

문제

#29704 벼락치기
Gold5
적용 알고리즘: knapsnak 알고리즘


풀이 방법

  • 일반적인 가방에 담기 문제이다.

코드 흐름

코드

n, t = map(int, input().split())
stuff = [[0,0]]
knapsack = [[0 for _ in range(t + 1)] for _ in range(n + 1)]

for _ in range(n):
    stuff.append(list(map(int, input().split())))

for i in range(1, n + 1):
    for j in range(1, t + 1):
        weight = stuff[i][0] 
        value = stuff[i][1]
       
        if j < weight:
            knapsack[i][j] = knapsack[i - 1][j]
        else:
            knapsack[i][j] = max(value + knapsack[i - 1][j - weight], knapsack[i - 1][j])

total_cost = 0
for i in range(len(stuff)):
    total_cost += stuff[i][1]

print(total_cost - knapsack[n][t])

체감 난이도: 4.2/5
이 유형의 문제는 여러번 풀어서 더 숙지해야 할거같다…