백준 14729: 벼락치기 - dp, knapsack(Python/파이썬)

Hyn·2025년 2월 11일

Algorithm(Py)

목록 보기
15/37
import sys
input = sys.stdin.readline

# 단원 개수, 총 시간
n, t = map(int, input().split())

dp = [0] * (t+1)
for _ in range(n):
    k, s = map(int, input().split())
    # 공부 시간, 배점

    for i in range(t, -1, -1):
        if i + k <= t:
            dp[i+k] = max(dp[i] + s, dp[i+k])
print(dp[t])

개선된 코드
i+k <= t 를 검사하는 대신 반복문 범위를 k~t까지로 한정하고 돌림

import sys
input = sys.stdin.readline

# 단원 개수, 총 시간
n, t = map(int, input().split())

dp = [0] * (t+1)
for _ in range(n):
    k, s = map(int, input().split())
    # 공부 시간, 배점
  =
    for i in range(t, k-1, -1):
        dp[i] = max(dp[i-k] + s, dp[i])
print(dp[t])
profile
쪼렙 개발자 하지만 포기하지 않지

0개의 댓글