import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int n = sc.nextInt();
int[] A = new int[n];
for(int i=0;i<n;i++){
A[i] = sc.nextInt();
}
int[] dp = new int[n+1];
dp[0] = 0;
dp[1] = A[0];
if(n==1 ){
System.out.println(A[0]);
}else if(n==2){
System.out.println(A[0]+A[1]);
}else{
dp[2] = A[0]+A[1];
int leftSum = A[0];
int rightSum = A[1];
int left = 0;
int right = 1;
for(int i=3;i<=n;i++){
if(i==3){
dp[i] = Math.min(Math.abs(A[left]-A[i-1])+rightSum, leftSum+Math.abs(A[right]-A[i-1]));
if(Math.abs(A[left]-A[i-1])+rightSum >= leftSum+Math.abs(A[right]-A[i-1])){
right = i-1;
}else{
left = i-1;
}
}else{
dp[i] = Math.min(Math.abs(A[left]-A[i-1])+(left>0?dp[i-1]:dp[i-1]-A[left]), (right>0?dp[i-1]:dp[i-1]-A[right])+Math.abs(A[right]-A[i-1]));
if(Math.abs(A[left]-A[i-1]) >= Math.abs(A[right]-A[i-1])){
right = i-1;
}else{
left = i-1;
}
}
}
System.out.println(dp[n]);
}
}
sc.close();
}
}
感觉快要写出来了,没时间考完又写了下,有点乱。。。等题目开放后去验证下通过多少。。。
#网易#