E Kein Rucksackproblem. Ich habe es rekursiv zusammengesetzt, aber TLE ohne Berücksichtigung des Rechenaufwands. Ich wusste nicht, wie man mit einem Array dp macht, also war die Zeit abgelaufen.
Kommentar auf youtube https://www.youtube.com/watch?v=pHzHTVIqrG8&feature=youtu.be
Hitpoint, N = map(int, input().split())
magic_damage = []
magic_point = []
for _ in range(N):
A, B = map(int, input().split())
magic_damage.append(A)
magic_point.append(B)
# dp = [[float("inf") for _ in range(Hitpoint + 1)] for _ in range(N + 1)]
dp = [float('inf') for _ in range(Hitpoint + 1)]
dp[0] = 0
for i in range(N):
for now_HP in range(Hitpoint + 1):
next_HP = min(now_HP + magic_damage[i], Hitpoint)
dp[next_HP] = min(dp[next_HP], dp[now_HP] + magic_point[i])
# dp[i + 1][now_HP] = min(dp[i + 1][now_HP], dp[i][now_HP - magic_damage[i]] + magic_point[i])
print(dp[Hitpoint])
Recommended Posts