Problem p02586 (python)

Fixed submission:
# -*- coding: utf-8 -*-
import sys
from collections import defaultdict
R,C,K=map(int, sys.stdin.readline().split())

value=defaultdict(lambda: 0)
value=[ [0 for _ in range(C+1)] for __ in range(R+1) ]
for _ in range(K):
    r,c,v=map(int, sys.stdin.readline().split())
    value[r][c]=v

dp0=[0]*(C+1)
dp1=[0]*(C+1)
dp2=[0]*(C+1)
dp3=[0]*(C+1)

#dp1[1]=value[1][1]

for r in range(1,R+1):
    for c in range(1,C+1):
        dp0[c]=max( dp0[c-1], dp0[c] )
        dp1[c]=max( dp1[c-1], dp1[c] )
        dp2[c]=max( dp2[c-1], dp2[c] )
        dp3[c]=max( dp3[c-1], dp3[c] )
        #今のマスにアイテムがある場合
        if 0<value[r][c]:
            dp3[c]=max( dp3[c-1], dp2[c]+value[r][c] )
            dp2[c]=max( dp2[c-1], dp1[c]+value[r][c] )
            dp1[c]=max( dp1[c-1], dp0[c]+value[r][c] )

    #上の行にアイテムをコピー
    for c in range(1,C+1):
        dp0[c]=max( dp0[c], dp1[c], dp2[c], dp3[c] )
    dp1=[0]*(C+1)
    dp2=[0]*(C+1)
    dp3=[0]*(C+1)

print dp0[C]

Buggy submission (verdict: Runtime Error):
# -*- coding: utf-8 -*-
import sys
from collections import defaultdict
R,C,K=map(int, sys.stdin.readline().split())

value=defaultdict(lambda: 0)
value=[ [0 for _ in range(C+1)] for __ in range(R+1) ]
for _ in range(K):
    r,c,v=map(int, sys.stdin.readline().split())
    value[r][c]=v

dp0=[0]*(C+1)
dp1=[0]*(C+1)
dp2=[0]*(C+1)
dp3=[0]*(C+1)

#初期化
for c in range(1,C+1):
    dp0[c]=0
dp1[1]=value[(1,1)]

for r in range(1,R+1):
    for c in range(2,C+1):
        #今のマスにアイテムがある場合
        if 0<value[r][c]:
            #今のマスまでで1個取得=max(左のマスまでで1個取得, 今のマスで0個取得+v )
            dp1[c]=max( dp1[c-1], dp0[c])
            #今のマスまでで2個取得=max(左のマスまでで2個取得, 左のマスまでで1個取得+v)
            dp2[c]=max( dp2[c-1], dp1[c-1])
            #今のマスまでで3個取得=max(左のマスまでで3個取得, 左のマスまでで2個取得+v)
            dp3[c]=max( dp3[c-1], dp2[c-1])
        #今のマスにアイテムがない場合
        else:
            dp1[c]=dp1[c-1]
            dp2[c]=dp2[c-1]
            dp3[c]=dp3[c-1]
        
    #上の行にアイテムをコピー
    #for c in range(1,C+1):
    #    dp0[c]=max(dp0[c],dp1[c],dp2[c],dp3[c])
    #dp1=defaultdict(lambda: float("-inf")) 
    #dp2=defaultdict(lambda: float("-inf")) 
    #dp3=defaultdict(lambda: float("-inf")) 

print dp0[C]

Buggy submission (verdict: Runtime Error):
# -*- coding: utf-8 -*-
import sys
from collections import defaultdict
R,C,K=map(int, sys.stdin.readline().split())

value=defaultdict(lambda: 0)
value=[ [0 for _ in range(C+1)] for __ in range(R+1) ]
for _ in range(K):
    r,c,v=map(int, sys.stdin.readline().split())
    value[r][c]=v

dp0=[0]*(C+1)
dp1=[0]*(C+1)
dp2=[0]*(C+1)
dp3=[0]*(C+1)

#初期化
for c in range(1,C+1):
    dp0[c]=0
dp1[1]=value[(1,1)]

for r in range(1,R+1):
    for c in range(2,C+1):
        #今のマスにアイテムがある場合
        if 0<value[r][c]:
            #今のマスまでで1個取得=max(左のマスまでで1個取得, 今のマスで0個取得+v )
            dp1[c]=max( dp1[c-1], dp0[c])
            #今のマスまでで2個取得=max(左のマスまでで2個取得, 左のマスまでで1個取得+v)
            dp2[c]=max( dp2[c-1], dp1[c-1])
            #今のマスまでで3個取得=max(左のマスまでで3個取得, 左のマスまでで2個取得+v)
            dp3[c]=max( dp3[c-1], dp2[c-1])
        #今のマスにアイテムがない場合
        else:
            dp1[c]=dp1[c-1]
            dp2[c]=dp2[c-1]
            dp3[c]=dp3[c-1]
        
    #上の行にアイテムをコピー
    #for c in range(1,C+1):
    #    dp0[c]=max(dp0[c],dp1[c],dp2[c],dp3[c])
    #dp1=defaultdict(lambda: float("-inf")) 
    #dp2=defaultdict(lambda: float("-inf")) 
    #dp3=defaultdict(lambda: float("-inf")) 

print dp0[C]

Buggy submission (verdict: Runtime Error):
# -*- coding: utf-8 -*-
import sys
from collections import defaultdict
R,C,K=map(int, sys.stdin.readline().split())

value=defaultdict(lambda: 0)
value=[ [0 for _ in range(C+1)] for __ in range(R+1) ]
for _ in range(K):
    r,c,v=map(int, sys.stdin.readline().split())
    value[r][c]]=v

dp0=[0]*(C+1)
dp1=[0]*(C+1)
dp2=[0]*(C+1)
dp3=[0]*(C+1)

#初期化
for c in range(1,C+1):
    dp0[c]=0
dp1[1]=value[(1,1)]

for r in range(1,R+1):
    for c in range(2,C+1):
        #今のマスにアイテムがある場合
        if 0<value[r][c]:
            #今のマスまでで1個取得=max(左のマスまでで1個取得, 今のマスで0個取得+v )
            dp1[c]=max( dp1[c-1], dp0[c])
            #今のマスまでで2個取得=max(左のマスまでで2個取得, 左のマスまでで1個取得+v)
            dp2[c]=max( dp2[c-1], dp1[c-1])
            #今のマスまでで3個取得=max(左のマスまでで3個取得, 左のマスまでで2個取得+v)
            dp3[c]=max( dp3[c-1], dp2[c-1])
        #今のマスにアイテムがない場合
        else:
            dp1[c]=dp1[c-1]
            dp2[c]=dp2[c-1]
            dp3[c]=dp3[c-1]
        
    #上の行にアイテムをコピー
    #for c in range(1,C+1):
    #    dp0[c]=max(dp0[c],dp1[c],dp2[c],dp3[c])
    #dp1=defaultdict(lambda: float("-inf")) 
    #dp2=defaultdict(lambda: float("-inf")) 
    #dp3=defaultdict(lambda: float("-inf")) 

print dp0[C]