E Aucun problème de sac à dos. Je l'ai assemblé récursivement, mais TLE sans tenir compte de la quantité de calcul. Je ne savais pas comment faire dp en utilisant un tableau, donc le temps était écoulé.
Commentaire sur 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