Buggy python submission (verdict: Time Limit Exceeded):
N, W = map(int, input().split())
INF = 10**10
dp = [[-INF]*(W+1) for i in range(N+1)]
dp[0][0] = 0

for i in range(N):
    w,v = map(int, input().split())
    dp[i+1][:] = dp[i][:]
    for j in range(W):
        if dp[i][j] == -INF:continue 
        if j + w > W: continue
        dp[i+1][j+w] = max(dp[i][j+w], dp[i][j] + v)

print(max(dp[N]))

Fixed submission:

import numpy as np
N,W = map(int, input().split())
# np.maximum https://www.sejuku.net/blog/69175
# 第一引数と第二引数の大小関係を要素ごとに比較して、大きい方を格納した配列を返します。
dp = np.zeros(W+1, dtype=np.int64)
for _ in range(N):
    w,v = map(int,input().split())
    # w以下ならvを足したもの、w以上ならそのままの値で、最大値を求める
    # 出力はw以上の配列として返す(それ以下は重さwなので関与しない)
    # 足す場合が前者、足さない場合が後者。その重さでの最大valueが保存されている
    np.maximum(dp[:W-w+1]+v,dp[w:],out=dp[w:]) 

print(dp[-1])

Buggy python submission (verdict: Time Limit Exceeded):
"""
ナップサック問題
"""
N,W = map(int, input().split())
dp = [[-1 for i in range(100100)] for j in range(N+1)]
dp[0][0] = 0
for i in range(N):
    w, v = map(int, input().split())
    for j in range(W):
        dp[i+1][j] = max(dp[i+1][j], dp[i][j])
        if dp[i][j] == -1:
            continue
        elif j+w <= W:
            # print("i:{},j:{},value1:{}".format(i,i+j,max(dp[i][j]+v, dp[i][j+w])))
            dp[i+1][j+w] = max(dp[i][j]+v, dp[i][j+w])
            # print(dp[i+1][j+w],i+1,j+w)
 
print(max(dp[N][:W+1]))

Fixed submission:

import numpy as np
N,W = map(int, input().split())
# np.maximum https://www.sejuku.net/blog/69175
# 第一引数と第二引数の大小関係を要素ごとに比較して、大きい方を格納した配列を返します。
dp = np.zeros(W+1, dtype=np.int64)
for _ in range(N):
    w,v = map(int,input().split())
    # w以下ならvを足したもの、w以上ならそのままの値で、最大値を求める
    # 出力はw以上の配列として返す(それ以下は重さwなので関与しない)
    # 足す場合が前者、足さない場合が後者。その重さでの最大valueが保存されている
    np.maximum(dp[:W-w+1]+v,dp[w:],out=dp[w:]) 

print(dp[-1])

Buggy python submission (verdict: Time Limit Exceeded):
N,W = map(int,input().split())
ws, vs = [], []

for i in range(N):
    w,v = map(int,input().split())
    ws.append(w)
    vs.append(v)

dp = [[0 for _ in range(W+1)] for _ in range(N)]
for i,(w,v) in enumerate(zip(ws,vs)):
    for j in range(W+1):
        if j - w >= 0:
            dp[i][j] = max(dp[i-1][j], dp[i-1][j-w] + v)
        else:
            dp[i][j] = max(dp[i][j], dp[i-1][j])

print(max(dp[-1]))

Fixed submission:

import numpy as np
N,W = map(int, input().split())
# np.maximum https://www.sejuku.net/blog/69175
# 第一引数と第二引数の大小関係を要素ごとに比較して、大きい方を格納した配列を返します。
dp = np.zeros(W+1, dtype=np.int64)
for _ in range(N):
    w,v = map(int,input().split())
    # w以下ならvを足したもの、w以上ならそのままの値で、最大値を求める
    # 出力はw以上の配列として返す(それ以下は重さwなので関与しない)
    # 足す場合が前者、足さない場合が後者。その重さでの最大valueが保存されている
    np.maximum(dp[:W-w+1]+v,dp[w:],out=dp[w:]) 

print(dp[-1])

Buggy python submission (verdict: Time Limit Exceeded):
N,W = map(int,input().split())
ws, vs = [], []

for i in range(N):
    w,v = map(int,input().split())
    ws.append(w)
    vs.append(v)

# 重さの総和の値を固定して、その値の最大値を求める組み合わせを
# dp[i][sum_wN]とする
dp = [[0 for _ in range(W+1)] for _ in range(N)]

# i番目についてのやつ
ans = 0
for i in range(N):
    for j in range(W+1):
        # あるWについて
        # i番目をknapsacに加える場合
        if j - ws[i] >= 0:
            dp[i][j] = max(dp[i-1][j],dp[i-1][j-ws[i]] + vs[i])
        else:
            dp[i][j] = max(dp[i][j],dp[i-1][j])

print(max(dp[-1]))

Fixed submission:

import numpy as np
N,W = map(int, input().split())
# np.maximum https://www.sejuku.net/blog/69175
# 第一引数と第二引数の大小関係を要素ごとに比較して、大きい方を格納した配列を返します。
dp = np.zeros(W+1, dtype=np.int64)
for _ in range(N):
    w,v = map(int,input().split())
    # w以下ならvを足したもの、w以上ならそのままの値で、最大値を求める
    # 出力はw以上の配列として返す(それ以下は重さwなので関与しない)
    # 足す場合が前者、足さない場合が後者。その重さでの最大valueが保存されている
    np.maximum(dp[:W-w+1]+v,dp[w:],out=dp[w:]) 

print(dp[-1])