Buggy python submission (verdict: Runtime Error):
import sys
import numpy as np
N, W = map(int, input().split())
def knapsack(n, w):
    # dp[i][j] : i番目の品物で重さj以下の価値の最大値
    dp = np.zeros([N+1, W+1], dtype='int64')
    # forは関数の中で回す。
    for i in range(N):
        w, v = map(int, input().split())
        # i+1番目でwより小さい場合は、i番目と変更なし
        dp[i+1][:w] = dp[i][:w]
        dp[i+1][w:] = np.maximum(dp[i][w:], dp[i][:w] + v)
    return dp[-1][-1]

print(knapsack(N, W))

Fixed submission:
import sys
import numpy as np
N, W = map(int, input().split())
def knapsack(n, w):
    # dp[i][j] : i番目の品物で重さj以下の価値の最大値
    dp = np.zeros([N+1, W+1], dtype='int64')
    # forは関数の中で回す。
    for i in range(N):
        w, v = map(int, input().split())
        # i+1番目でwより小さい場合は、i番目と変更なし
        dp[i+1][:w] = dp[i][:w]
        dp[i+1][w:] = np.maximum(dp[i][w:], dp[i][:-w] + v)
    return dp[-1][-1]

print(knapsack(N, W))

Buggy python submission (verdict: Runtime Error):
n,w = map(int, input().split())
lst_weight = [0 for _ in range(n)]
lst_value = [0 for _ in range(n)]
for i in range(n):
    lst_weight[i], lst_value[i] = map(int, input().split())
dp = [[0 for i in range(w)] for j in range(n+1)]

#後者が前者よりも大きい時に更新→DPテーブルを-infに初期化
def chmax(a,b):
    if(a< b):
        return b
    else:
        return a

#各品物の選択
for i in range(n):
    for sum_w in range(w+1):
        #選択した品物を加える
        if sum_w >= lst_weight[i]:
            #今回の手の暫定最大値と1つ前までの手の確定最大値を比較する
            dp[i+1][sum_w] = chmax(dp[i+1][sum_w], dp[i][sum_w-lst_weight[i]] + lst_value[i])
        else:
            # i番目の品物を選ばない→前までの手で最適化されている最大値が次の手の最大値になるはず
            dp[i+1][sum_w] = chmax(dp[i+1][sum_w], dp[i][sum_w])
            
print(dp[n][w])

Fixed submission:
import sys
import numpy as np
N, W = map(int, input().split())
def knapsack(n, w):
    # dp[i][j] : i番目の品物で重さj以下の価値の最大値
    dp = np.zeros([N+1, W+1], dtype='int64')
    # forは関数の中で回す。
    for i in range(N):
        w, v = map(int, input().split())
        # i+1番目でwより小さい場合は、i番目と変更なし
        dp[i+1][:w] = dp[i][:w]
        dp[i+1][w:] = np.maximum(dp[i][w:], dp[i][:-w] + v)
    return dp[-1][-1]

print(knapsack(N, W))

Buggy python submission (verdict: Runtime Error):
n,w = map(int, input().split())
lst_weight = [0 for _ in range(N)]
lst_value = [0 for _ in range(N)]
for i in range(N):
    lst_weight[i], lst_value[i] = map(int, input().split())
dp = [[0 for i in range(w)] for j in range(n+1)]

#後者が前者よりも大きい時に更新→DPテーブルを-infに初期化
def chmax(a,b):
    if(a< b):
        return b
    else:
        return a

#各品物の選択
for i in range(n):
    for sum_w in range(w+1):
        #選択した品物を加える
        if sum_w >= lst_weight[i]:
            #今回の手の暫定最大値と1つ前までの手の確定最大値を比較する
            dp[i+1][sum_w] = chmax(dp[i+1][sum_w], dp[i][sum_w-lst_weight[i]] + lst_value[i])
        else:
            # i番目の品物を選ばない→前までの手で最適化されている最大値が次の手の最大値になるはず
            dp[i+1][sum_w] = chmax(dp[i+1][sum_w], dp[i][sum_w])
            
print(dp[n][w])

Fixed submission:
import sys
import numpy as np
N, W = map(int, input().split())
def knapsack(n, w):
    # dp[i][j] : i番目の品物で重さj以下の価値の最大値
    dp = np.zeros([N+1, W+1], dtype='int64')
    # forは関数の中で回す。
    for i in range(N):
        w, v = map(int, input().split())
        # i+1番目でwより小さい場合は、i番目と変更なし
        dp[i+1][:w] = dp[i][:w]
        dp[i+1][w:] = np.maximum(dp[i][w:], dp[i][:-w] + v)
    return dp[-1][-1]

print(knapsack(N, W))