Buggy python submission (verdict: Time Limit Exceeded):
import numpy as np
H,N = map(int, input().split())
A = []
B = []
for i in range(N):
    a,b = map(int,input().split())
    A.append(a)
    B.append(b)
    
dp = [np.inf for i in range(10**7+1)]
dp[0] = 0
for i in range(H+1):
    for j in range(N):
        dp[i+A[j]] = min(dp[i+A[j]],dp[i]+B[j])
        
print(min(dp[H:]))

Fixed submission:
import numpy as np
 
h, n = map(int, input().split())
ab = [list(map(int, input().split())) for _ in range(n)]
ab = np.array(ab)
 
a = ab[:, 0]
b = ab[:, 1]
 
dp = np.zeros(100001, dtype=np.int)
for i in range(1, h+1):
    dp[i] = (dp[i-a]+b).min()

print(dp[h])

Buggy python submission (verdict: Runtime Error):
import numpy as np
H,N = map(int, input().split())
A = []
B = []
for i in range(N):
    a,b = map(int,input().split())
    A.append(a)
    B.append(b)
    
dp = [np.inf for i in range(10**7+1)]
dp[0] = 0
for i in range(H+1):
    for j in range(N):
        dp[i+A[j]] = min(dp[i+A[j]],dp[i]+B[j])
        
print(min(dp[H:]))

Fixed submission:
import numpy as np
 
h, n = map(int, input().split())
ab = [list(map(int, input().split())) for _ in range(n)]
ab = np.array(ab)
 
a = ab[:, 0]
b = ab[:, 1]
 
dp = np.zeros(100001, dtype=np.int)
for i in range(1, h+1):
    dp[i] = (dp[i-a]+b).min()

print(dp[h])

Buggy python submission (verdict: Runtime Error):
import numpy as np
H,N = map(int, input().split())
A = []
B = []
for i in range(N):
    a,b = map(int,input().split())
    A.append(a)
    B.append(b)
    
dp = [10**8+1 for i in range(H*N+1)]
dp[0] = 0
for i in range(H+1):
    for j in range(N):
        dp[i+A[j]] = min(dp[i+A[j]],dp[i]+B[j])
        
print(min(dp[H:]))

Fixed submission:
import numpy as np
 
h, n = map(int, input().split())
ab = [list(map(int, input().split())) for _ in range(n)]
ab = np.array(ab)
 
a = ab[:, 0]
b = ab[:, 1]
 
dp = np.zeros(100001, dtype=np.int)
for i in range(1, h+1):
    dp[i] = (dp[i-a]+b).min()

print(dp[h])

Buggy python submission (verdict: Runtime Error):
import numpy as np
import sys
sys.setrecursionlimit(2000)
H,N = map(int, input().split())
A = []
B = []
for i in range(N):
    a,b = map(int,input().split())
    A.append(a)
    B.append(b)

memo = [10**4+1 for i in range(H+1)]

def memorize(H,memo,A,B,N):
    if H<= 0:
        return 0
    else:
        if memo[H]!=10**4+1:
            return memo[H]
        cost_min = 10**4+1
        for i in range(N):
            cost = B[i] + memorize(H-A[i],memo,A,B,N)
            cost_min = min(cost_min,cost)
        memo[H] = cost_min
        return cost_min
        
print(memorize(H,memo,A,B,N))

Fixed submission:
import numpy as np
 
h, n = map(int, input().split())
ab = [list(map(int, input().split())) for _ in range(n)]
ab = np.array(ab)
 
a = ab[:, 0]
b = ab[:, 1]
 
dp = np.zeros(100001, dtype=np.int)
for i in range(1, h+1):
    dp[i] = (dp[i-a]+b).min()

print(dp[h])

Buggy python submission (verdict: Runtime Error):
import numpy as np
sys.setrecursionlimit(10**4+1)
H,N = map(int, input().split())
A = []
B = []
for i in range(N):
    a,b = map(int,input().split())
    A.append(a)
    B.append(b)

memo = [10**4+1 for i in range(H+1)]

def memorize(H,memo,A,B,N):
    if H<= 0:
        return 0
    else:
        if memo[H]!=10**4+1:
            return memo[H]
        cost_min = 10**4+1
        for i in range(N):
            cost = B[i] + memorize(H-A[i],memo,A,B,N)
            cost_min = min(cost_min,cost)
        memo[H] = cost_min
        return cost_min
        
print(memorize(H,memo,A,B,N))

Fixed submission:
import numpy as np
 
h, n = map(int, input().split())
ab = [list(map(int, input().split())) for _ in range(n)]
ab = np.array(ab)
 
a = ab[:, 0]
b = ab[:, 1]
 
dp = np.zeros(100001, dtype=np.int)
for i in range(1, h+1):
    dp[i] = (dp[i-a]+b).min()

print(dp[h])