기본적인 0, 1배낭문제. 열은 hp, 행은 각 선택지.
이전 hp에서 최댓값을 계승할 것이냐? 아니면 새로운 선택지를 취할것이냐?
import sys
input = sys.stdin.readline
N = int(input())
L = [0] + list(map(int, input().split()))
P = [0] + list(map(int, input().split()))
dp = [[0] * 101 for _ in range(N+1)]
for i in range(1, N+1):
for j in range(1, 101):
if L[i] <= j:
dp[i][j] = max(dp[i-1][j], dp[i-1][j-L[i]] + P[i])
else:
dp[i][j] = dp[i-1][j]
print(dp[N][99])
'practivceAlgorithm > 백준' 카테고리의 다른 글
[백준][Python] 1516 게임개발 (0) | 2021.10.04 |
---|---|
[백준][Python] 2665 미로만들기 (0) | 2021.10.03 |
[백준][Python] 1302 베스트셀러 (0) | 2021.10.03 |
[백준][Python] 1713 후보 추천하기 (0) | 2021.10.02 |
[백준][Python] 5766 할아버지는 유명해 (0) | 2021.10.02 |