# _*_ coding:utf-8 _*_

#  Atcoder_EducationDP_ContestX-1

#  TODO https://atcoder.jp/contests/dp/tasks/dp_a

#  参考文献 https://qiita.com/drken/items/dc53c683d6de8aeacf5a#%E8%A7%A3%E6%B3%95

#  C++ バージョンを上から書き下す

#  貰う型DP

import sys



# 初期化

# 足場の数となる要素数は足場の値の最大値であるMAX

blockMAXElement = 100010

blockElementRange = list(range(0,blockMAXElement,+1))

# DPテーブルの中身は今回は最小値を求めるため最大値を利用

dp = list()

for _ in blockElementRange:

	dp.append(sys.maxsize)



N = int(input().strip())

blockRange = list(range(0,N,+1))

h = list(map(int,input().strip().split(' ')))



# 初期の条件 0歩の時は値が与えられていないのでDPは0にセット

dp[0] = 0

for position in range(1,N,+1):

#   一つ手前の足場までで最適な値のはず、のコスト

	previousMinCost = dp[position-1]

#   一つ手前から来た場合の足場positionでのコスト計

#   pM = previousMin

	pMNowCost = dp[position-1]+abs(h[position]-h[position-1])

#   今の足場で設定されている足場へのコストより小さくなるならそれを改めて入れる

	if pMNowCost <= dp[position]:

		dp[position] = pMNowCost

#   これは二つ手前から来たケースを考えるのでpositon = 1の場合を除いて考える

#   それ以降は一個手前からと同じ

	if 1 < position:

		previous2MinCost = dp[position-2]

		pM2NowCost = dp[position-2]+abs(h[position]-h[position-2])

		if pM2NowCost <= dp[position]:

			dp[position] = pM2NowCost



print(("{}".format(dp[N-1])))

# _*_ coding:utf-8 _*_

#  Atcoder_EducationDP_ContestX-1_other1

#  TODO https://atcoder.jp/contests/dp/tasks/dp_a

#  参考文献 https://qiita.com/drken/items/dc53c683d6de8aeacf5a#%E8%A7%A3%E6%B3%95

#  C++ バージョンを上から書き下す

#  TODO　配る型DP https://qiita.com/drken/items/dc53c683d6de8aeacf5a#%E5%88%A5%E8%A7%A3-1-%E9%85%8D%E3%82%8B-dp

import sys



# 初期化

# 足場の数となる要素数は足場の値の最大値であるMAX

blockMAXElement = 100010

blockElementRange = list(range(0,blockMAXElement,+1))

# DPテーブルの中身は今回は最小値を求めるため最大値を利用



dp = [sys.maxsize] * blockMAXElement

# コスト

# 参考文献のC++では配列は宣言時に初期化されるがpythonはそれがないのでまずはあえて0で初期化

h = [0] * blockMAXElement



N = int(input().strip())

inputh = list(map(int,input().strip().split(' ')))

# h配列を入力データから取り出した物に置き換える

for i  in range(0,len(inputh),+1):

	h[i] = inputh[i]



# 初期の条件 0歩の時だけはコストがないので、0にセット

dp[0] = 0

# 現在の位置から最後の一歩手前(N-2歩き目)まで(仮にそこで2歩進んだ場合もDPテーブルはあるのでエラーにはならず)

for position in range(0,N-1,+1):

#   現在の岩場で最適な値のコスト

	nowMinCost = dp[position]

#   1歩進んだときのコスト計

	nextOneCost = nowMinCost+abs(h[position+1]-h[position])

#   一歩次の足場で設定されている足場へのコストより小さくなるならそれを改めて入れる

	if nextOneCost < dp[position+1]:

		dp[position+1]=nextOneCost

#   2歩足場をまたいだケースを考える。貰う場合と異なるのはpositionは0から始めて良いし

#   逆にN-2の石の足場から2歩飛んでもプログラム上ではエラーにならない

#   それ以降は1個手前からと同じ

	nextTwoCost = dp[position]+abs(h[position+2]-h[position])

	if nextTwoCost < dp[position+2]:

		dp[position+2] = nextTwoCost



print(("{}".format(dp[N-1])))
# _*_ coding:utf-8 _*_
#  Atcoder_EducationDP_ContestX-1
#  TODO https://atcoder.jp/contests/dp/tasks/dp_a
#  参考文献 https://qiita.com/drken/items/dc53c683d6de8aeacf5a#%E8%A7%A3%E6%B3%95
#  C++ バージョンを上から書き下す
#  貰う型DP
import sys

# 初期化
# 足場の数となる要素数は足場の値の最大値であるMAX
blockMAXElement = 100010
blockElementRange = list(range(0, blockMAXElement, +1))
# DPテーブルの中身は今回は最小値を求めるため最大値を利用
dp = list()
for _ in blockElementRange:
    dp.append(sys.maxsize)
N = int(input().strip())
blockRange = list(range(0, N, +1))
h = list(map(int, input().strip().split(" ")))
# 初期の条件 0歩の時は値が与えられていないのでDPは0にセット
dp[0] = 0
for position in range(1, N, +1):
    #   一つ手前の足場までで最適な値のはず、のコスト
    previousMinCost = dp[position - 1]
    #   一つ手前から来た場合の足場positionでのコスト計
    #   pM = previousMin
    pMNowCost = dp[position - 1] + abs(h[position] - h[position - 1])
    #   今の足場で設定されている足場へのコストより小さくなるならそれを改めて入れる
    if pMNowCost <= dp[position]:
        dp[position] = pMNowCost
    #   これは二つ手前から来たケースを考えるのでpositon = 1の場合を除いて考える
    #   それ以降は一個手前からと同じ
    if 1 < position:
        previous2MinCost = dp[position - 2]
        pM2NowCost = dp[position - 2] + abs(h[position] - h[position - 2])
        if pM2NowCost <= dp[position]:
            dp[position] = pM2NowCost
print(("{}".format(dp[N - 1])))

# _*_ coding:utf-8 _*_
#  Atcoder_EducationDP_ContestX-1_other1
#  TODO https://atcoder.jp/contests/dp/tasks/dp_a
#  参考文献 https://qiita.com/drken/items/dc53c683d6de8aeacf5a#%E8%A7%A3%E6%B3%95
#  C++ バージョンを上から書き下す
#  TODO　配る型DP https://qiita.com/drken/items/dc53c683d6de8aeacf5a#%E5%88%A5%E8%A7%A3-1-%E9%85%8D%E3%82%8B-dp
import sys

# 初期化
# 足場の数となる要素数は足場の値の最大値であるMAX
blockMAXElement = 100010
blockElementRange = list(range(0, blockMAXElement, +1))
# DPテーブルの中身は今回は最小値を求めるため最大値を利用
dp = [sys.maxsize] * blockMAXElement
# コスト
# 参考文献のC++では配列は宣言時に初期化されるがpythonはそれがないのでまずはあえて0で初期化
h = [0] * blockMAXElement
N = int(input().strip())
inputh = list(map(int, input().strip().split(" ")))
# h配列を入力データから取り出した物に置き換える
for i in range(0, len(inputh), +1):
    h[i] = inputh[i]
# 初期の条件 0歩の時だけはコストがないので、0にセット
dp[0] = 0
# 現在の位置から最後の一歩手前(N-2歩き目)まで(仮にそこで2歩進んだ場合もDPテーブルはあるのでエラーにはならず)
for position in range(0, N - 1, +1):
    #   現在の岩場で最適な値のコスト
    nowMinCost = dp[position]
    #   1歩進んだときのコスト計
    nextOneCost = nowMinCost + abs(h[position + 1] - h[position])
    #   一歩次の足場で設定されている足場へのコストより小さくなるならそれを改めて入れる
    if nextOneCost < dp[position + 1]:
        dp[position + 1] = nextOneCost
    #   2歩足場をまたいだケースを考える。貰う場合と異なるのはpositionは0から始めて良いし
    #   逆にN-2の石の足場から2歩飛んでもプログラム上ではエラーにならない
    #   それ以降は1個手前からと同じ
    nextTwoCost = dp[position] + abs(h[position + 2] - h[position])
    if nextTwoCost < dp[position + 2]:
        dp[position + 2] = nextTwoCost
print(("{}".format(dp[N - 1])))

-#  Atcoder_EducationDP_ContestX-1 +#  Atcoder_EducationDP_ContestX-1_other1 -#  貰う型DP +#  TODO　配る型DP https://qiita.com/drken/items/dc53c683d6de8aeacf5a#%E5%88%A5%E8%A7%A3-1-%E9%85%8D%E3%82%8B-dp -dp = list() -for _ in blockElementRange: -    dp.append(sys.maxsize) +dp = [sys.maxsize] * blockMAXElement +# コスト +# 参考文献のC++では配列は宣言時に初期化されるがpythonはそれがないのでまずはあえて0で初期化 +h = [0] * blockMAXElement -blockRange = list(range(0, N, +1)) -h = list(map(int, input().strip().split(" "))) -# 初期の条件 0歩の時は値が与えられていないのでDPは0にセット +inputh = list(map(int, input().strip().split(" "))) +# h配列を入力データから取り出した物に置き換える +for i in range(0, len(inputh), +1): +    h[i] = inputh[i] +# 初期の条件 0歩の時だけはコストがないので、0にセット -for position in range(1, N, +1): -    #   一つ手前の足場までで最適な値のはず、のコスト -    previousMinCost = dp[position - 1] -    #   一つ手前から来た場合の足場positionでのコスト計 -    #   pM = previousMin -    pMNowCost = dp[position - 1] + abs(h[position] - h[position - 1]) -    #   今の足場で設定されている足場へのコストより小さくなるならそれを改めて入れる -    if pMNowCost <= dp[position]: -        dp[position] = pMNowCost -    #   これは二つ手前から来たケースを考えるのでpositon = 1の場合を除いて考える -    #   それ以降は一個手前からと同じ -    if 1 < position: -        previous2MinCost = dp[position - 2] -        pM2NowCost = dp[position - 2] + abs(h[position] - h[position - 2]) -        if pM2NowCost <= dp[position]: -            dp[position] = pM2NowCost +# 現在の位置から最後の一歩手前(N-2歩き目)まで(仮にそこで2歩進んだ場合もDPテーブルはあるのでエラーにはならず) +for position in range(0, N - 1, +1): +    #   現在の岩場で最適な値のコスト +    nowMinCost = dp[position] +    #   1歩進んだときのコスト計 +    nextOneCost = nowMinCost + abs(h[position + 1] - h[position]) +    #   一歩次の足場で設定されている足場へのコストより小さくなるならそれを改めて入れる +    if nextOneCost < dp[position + 1]: +        dp[position + 1] = nextOneCost +    #   2歩足場をまたいだケースを考える。貰う場合と異なるのはpositionは0から始めて良いし +    #   逆にN-2の石の足場から2歩飛んでもプログラム上ではエラーにならない +    #   それ以降は1個手前からと同じ +    nextTwoCost = dp[position] + abs(h[position + 2] - h[position]) +    if nextTwoCost < dp[position + 2]: +        dp[position + 2] = nextTwoCost