Problem p03163 (python)

Fixed submission:
#https://atcoder.jp/contests/dp/tasks/dp_d
N,W = map(int,input().split())
Goods_List=[]
for i in range(N):
    Goods_List.append(list(map(int,input().split())))

Sum_Weight = sum(map(lambda x:x[0],Goods_List))
dp = [[-1] * (W + 1) for i in range(N)]

for i in range(N):
    Current_Weight = Goods_List[i][0]
    Current_Value  = Goods_List[i][1]
    dp[i][0] = 0
    if (i == 0) & (Current_Weight <= W) :
        dp[i][Current_Weight] = Current_Value
    elif i > 0:
        Last_Search_List = [j for j, x in enumerate(dp[i-1]) if x > -1]
        Current_Search_List = list(map(lambda x:x+Current_Weight,Last_Search_List))
        ##まずは前回値を入れる
        for l in range(len(Last_Search_List)):
            Last_Search_Weight =  Last_Search_List[l] 
            dp[i][Last_Search_Weight] = dp[i-1][Last_Search_Weight]
        ##今回値と比べる
        for k in range(len(Current_Search_List)):
            Last_Search_Weight =  Last_Search_List[k] 
            Current_Search_Weight = Current_Search_List[k]
            if Current_Search_Weight > W:
                break
            else:
                dp[i][Current_Search_Weight] = max((dp[i-1][Last_Search_Weight] + Current_Value),
                                                   dp[i-1][Current_Search_Weight])


print(max(dp[N-1]))

Buggy submission (verdict: Runtime Error):
#https://atcoder.jp/contests/dp/tasks/dp_d
N,W = map(int,input().split())
Goods_List=[]
for i in range(N):
    Goods_List.append(list(map(int,input().split())))

Sum_Weight = sum(map(lambda x:x[0],Goods_List))
dp = [[-1] * Sum_Weight for i in range(N)]

for i in range(N):
    Current_Weight = Goods_List[i][0]
    Current_Value  = Goods_List[i][1]
    dp[i][0] = 0
    if i == 0:
        dp[i][Current_Weight] = Current_Value
    else:
        Search_List = [j for j, x in enumerate(dp[i-1]) if x > -1]
        Comb_List = [0,Current_Weight]
        for k in Search_List:
            for l in Comb_List:
                if k + l > W:
                    break
                elif l == 0:
                    dp[i][k+l] = dp[i-1][k+l]
                else:
                    dp[i][k+l] = max(dp[i-1][k+l],dp[i-1][k]+Current_Value)
                    
print(max(dp[N-1]))

Buggy submission (verdict: Runtime Error):
#https://atcoder.jp/contests/dp/tasks/dp_d
N,W = map(int,input().split())
Goods_List=[]
for i in range(N):
    Goods_List.append(list(map(int,input().split())))

Sum_Weight = sum(map(lambda x:x[0],Goods_List))
dp = [[-1] * Sum_Weight for i in range(N)]

for i in range(N):
    Current_Weight = Goods_List[i][0]
    Current_Value  = Goods_List[i][1]
    dp[i][0] = 0
    if i == 0:
        dp[i][Current_Weight] = Current_Value
    else:
        Search_List = [i for i, x in enumerate(dp[i-1]) if x > -1]
        Comb_List = [0,Current_Weight]
        for j in Search_List:
            for k in Comb_List:
                if j + k > W:
                    break
                elif k == 0:
                    dp[i][j+k] = dp[i-1][j+k]
                else:
                    dp[i][j+k] = max(dp[i-1][j+k],dp[i-1][j]+Current_Value)
                    
print(max(dp[N-1]))

Buggy submission (verdict: Runtime Error):
#https://atcoder.jp/contests/dp/tasks/dp_d
N,W = map(int,input().split())
Goods_List=[]
for i in range(N):
    Goods_List.append(list(map(int,input().split())))

Sum_Weight = sum(map(lambda x:x[0],Goods_List))
dp = [[-1] * Sum_Weight for i in range(N)]

for i in range(N):
    Current_Weight = Goods_List[i][0]
    Current_Value  = Goods_List[i][1]
    dp[i][0] = 0
    if i == 0:
        dp[i][Current_Weight] = Current_Value
    else:
        Search_List = [i for i, x in enumerate(dp[i-1]) if x > -1]
        Comb_List = [0,Current_Weight]
        for j in Search_List:
            for k in Comb_List:
                if j + k > W:
                    break
                elif k == 0:
                    dp[i][j+k] = dp[i-1][j+k]
                else:
                    dp[i][j+k] = max(dp[i-1][j+k],dp[i-1][j]+Current_Value)
                    
            

            
            
    
print(max(dp[N-1]))