N 个石头,编号为 1,2,...,N。对于每个 i(1≤i≤N),石头 i 的高度为 hi。
最初有一只青蛙在石头 1 上。他将重复几次以下操作以到达石头 N:
找到青蛙到达石头 N 之前需要的最小总费用。
N 個の足場があります。 足場には 1, 2, …, N と番号が振られています。 各 i (1 ≤ i ≤ N) について、足場 i の高さは hi です。
最初、足場 1 にカエルがいます。 カエルは次の行動を何回か繰り返し、足場 N まで辿り着こうとしています。
カエルが足場 N に辿り着くまでに支払うコストの総和の最小値を求めてください。
入力は以下の形式で標準入力から与えられる。
N h1 h2 … hN
カエルが支払うコストの総和の最小値を出力せよ。
4
10 30 40 20
30
2
10 10
0
6
30 10 60 10 60 50
40
足場 1 → 2 → 4 と移動すると、コストの総和は ∣10 − 30∣ + ∣30 − 20∣ = 30 となります。
足場 1 → 2 と移動すると、コストの総和は ∣10 − 10∣ = 0 となります。
足場 1 → 3 → 5 → 6 と移動すると、コストの総和は ∣30 − 60∣ + ∣60 − 60∣ + ∣60 − 50∣ = 40 となります。
//dp[i]=min(dp[i-1]+abs(h[i]-h[i-1]),dp[i-2]+abs(h[i]-h[i-2])
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,h[100009],dp[100009];
signed main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>h[i];
}
dp[1]=0;
dp[2]=abs(h[2]-h[1]);
for(int i=2;i<=n;i++){
dp[i]=min(dp[i-1]+abs(h[i]-h[i-1]),dp[i-2]+abs(h[i]-h[i-2]));
}
cout<<dp[n];
}