Buggy python submission (verdict: Runtime Error):
n=int(input())
h=list(map(int,input().split()))
max_n=10**2

dp=[-1]*max_n #dp[i-1]が足場iまでのコストの最小値
dp[0]=0
dp[1]=abs(h[0]-h[1])
for i in range(2,n):
    res1=dp[i-1]+abs(h[i]-h[i-1]) #1ジャンプして足場iの時の最小値
    res2=dp[i-2]+abs(h[i]-h[i-2]) #2ジャンプして足場iの時の最小値
    dp[i]=min(res1,res2)

print(dp[n-1])

Fixed submission:
n=int(input())
h=list(map(int,input().split()))
max_n=10**5

dp=[-1]*max_n #dp[i-1]が足場iまでのコストの最小値
dp[0]=0
dp[1]=abs(h[0]-h[1])
for i in range(2,n):
    res1=dp[i-1]+abs(h[i]-h[i-1]) #1ジャンプして足場iの時の最小値
    res2=dp[i-2]+abs(h[i]-h[i-2]) #2ジャンプして足場iの時の最小値
    dp[i]=min(res1,res2)

print(dp[n-1])

Buggy python submission (verdict: Runtime Error):
def f_min(a,b):
    if a>b:
        return b
    else:
        return a

n=int(input())
h=list(map(int,input().split()))
max_n=10**5
DP=[-1 for i in range(max_n)] #計算のメモ、-1は未計算
def dp(i): #足場i+1までにかかる最小のコスト
    if DP[i]!=-1: #メモがあれば使う
        return DP[i]
    if i==0: #初期条件が足場1より0
        return 0
    elif i==1: #足場2へは1から2への一通りしかない
        return abs(h[0]-h[1])
    res1=abs(h[i-1]-h[i])+dp(i-1) #1つジャンプして足場i+1につくときの最小コスト
    res2=abs(h[i-2]-h[i])+dp(i-2) #2つジャンプして足場i+1につくときの最小コスト
    DP[i]=f_min(res1,res2) #二つのうち小さいほうが足場i+1につく最小コスト
    return DP[i]

print(dp(n-1))

Fixed submission:
n=int(input())
h=list(map(int,input().split()))
max_n=10**5

dp=[-1]*max_n #dp[i-1]が足場iまでのコストの最小値
dp[0]=0
dp[1]=abs(h[0]-h[1])
for i in range(2,n):
    res1=dp[i-1]+abs(h[i]-h[i-1]) #1ジャンプして足場iの時の最小値
    res2=dp[i-2]+abs(h[i]-h[i-2]) #2ジャンプして足場iの時の最小値
    dp[i]=min(res1,res2)

print(dp[n-1])

Buggy python submission (verdict: Runtime Error):
n=int(input())
h=list(map(int,input().split()))
max_n=10**5
DP=[-1 for i in range(n)] #計算のメモ、-1は未計算
def dp(i): #足場i+1までにかかる最小のコスト
    if DP[i]!=-1: #メモがあれば使う
        return DP[i]
    if i==0: #初期条件が足場1より0
        return 0
    elif i==1: #足場2へは1から2への一通りしかない
        return abs(h[0]-h[1])
    res1=abs(h[i-1]-h[i])+dp(i-1) #1つジャンプして足場i+1につくときの最小コスト
    res2=abs(h[i-2]-h[i])+dp(i-2) #2つジャンプして足場i+1につくときの最小コスト
    DP[i]=min(res1,res2) #二つのうち小さいほうが足場i+1につく最小コスト
    return DP[i]

print(dp(n-1))

Fixed submission:
n=int(input())
h=list(map(int,input().split()))
max_n=10**5

dp=[-1]*max_n #dp[i-1]が足場iまでのコストの最小値
dp[0]=0
dp[1]=abs(h[0]-h[1])
for i in range(2,n):
    res1=dp[i-1]+abs(h[i]-h[i-1]) #1ジャンプして足場iの時の最小値
    res2=dp[i-2]+abs(h[i]-h[i-2]) #2ジャンプして足場iの時の最小値
    dp[i]=min(res1,res2)

print(dp[n-1])

Buggy python submission (verdict: Runtime Error):
n=int(input())
h=list(map(int,input().split()))
max_n=10**5
DP=[-1 for i in range(max_n)] #計算のメモ、-1は未計算
def dp(i): #足場i+1までにかかる最小のコスト
    if DP[i]!=-1: #メモがあれば使う
        return DP[i]
    if i==0: #初期条件が足場1より0
        return 0
    elif i==1: #足場2へは1から2への一通りしかない
        return abs(h[0]-h[1])
    res1=abs(h[i-1]-h[i])+dp(i-1) #1つジャンプして足場i+1につくときの最小コスト
    res2=abs(h[i-2]-h[i])+dp(i-2) #2つジャンプして足場i+1につくときの最小コスト
    DP[i]=min(res1,res2) #二つのうち小さいほうが足場i+1につく最小コスト
    return DP[i]

print(dp(n-1))

Fixed submission:
n=int(input())
h=list(map(int,input().split()))
max_n=10**5

dp=[-1]*max_n #dp[i-1]が足場iまでのコストの最小値
dp[0]=0
dp[1]=abs(h[0]-h[1])
for i in range(2,n):
    res1=dp[i-1]+abs(h[i]-h[i-1]) #1ジャンプして足場iの時の最小値
    res2=dp[i-2]+abs(h[i]-h[i-2]) #2ジャンプして足場iの時の最小値
    dp[i]=min(res1,res2)

print(dp[n-1])