문제
알고리즘
- 반복문을 통해 각 체력내에 얻을 수 있는 기쁨을 확인한다.
- 현재 체력으로 인사를 못한다면 현재 기쁨을 이전 기쁨으로 초기화한다.
- 현재 체력으로 인사를 할 수 있다면 더 큰 값으로 기쁨을 초기화한다.
코드
import sys
n = int(sys.stdin.readline())
hp = list(map(int, sys.stdin.readline().split()))
joy = list(map(int, sys.stdin.readline().split()))
dp = [[0 for _ in range(101)] for _ in range(n + 1)]
# 반복문을 통해 각 체력내에 얻을 수 있는 기쁨을 확인
for i in range(1, n + 1):
for j in range(1, 101):
# 현재 체력이 hp[i - 1]보다 작다면
# 현재 기쁨을 이전 기쁨으로 초기화한다.
if j < hp[i - 1]:
dp[i][j] = dp[i - 1][j]
# 현재 체력이 hp[i - 1]보다 크거나 같다면
# 현재 기쁨을 갱신한다.
else:
dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - hp[i - 1]] + joy[i - 1])
print(dp[n][99])
github
'CodingTest > Baekjoon' 카테고리의 다른 글
[baekjoon] 백준 4307번(파이썬): 개미 (0) | 2022.02.13 |
---|---|
[baekjoon] 백준 2529번(파이썬): 부등호 (0) | 2022.02.12 |
[baekjoon] 백준 2304번(파이썬): 창고 다각형 (0) | 2022.02.10 |
[baekjoon] 백준 1965번(파이썬): 상자넣기 (0) | 2022.02.09 |
[baekjoon] 백준 1024번(파이썬): 수열의 합 (0) | 2022.02.08 |