import java.util.Scanner;
public class ClimbingStairsCost {
public static int minCostClimbingStairs(int[] cost) {
int n = cost.length;
// 获取输入的 cost 数组的长度
int[] dp = new int[n + 1];
// 创建一个用于存储每个台阶最小花费的 dp 数组
dp[0] = 0;
dp[1] = 0;
// 初始化第 0 个和第 1 个台阶的最小花费为 0,因为可以从这两个位置开始
for (int i = 2; i <= n; i++) {
// 从第 2 个台阶开始计算每个台阶的最小花费
dp[i] = Math.min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2]);
// 到达当前台阶 i 有两种可能:从 i - 1 台阶上来,花费为 dp[i - 1] + cost[i - 1];
// 或者从 i - 2 台阶上来,花费为 dp[i - 2] + cost[i - 2]。
// 取两者中的最小值作为到达当前台阶 i 的最小花费
}
return dp[n];
// 返回到达顶部(即第 n 个台阶)的最小花费
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
// 读取输入的 cost 数组的长度
int[] cost = new int[n];
for (int i = 0; i < n; i++) {
cost[i] = scanner.nextInt();
// 读取输入的 cost 数组的每个元素
}
int minCost = minCostClimbingStairs(cost);
System.out.println(minCost);
// 输出到达顶部的最小花费
scanner.close();
// 关闭 Scanner 对象,释放资源
}
}