/*
从第1块地砖走到第i + 1块地砖所需消耗的最小体力值记为dp[i],dp[0] = a[0],dp[1] = a[0] + a[1],i >= 2时,dp[i] = min{dp[i - 1],dp[i - 2]} + a[i],如此可得dp[n - 1];
*/
#include <stdio.h>
#include <stdlib.h>
int main() {
//读取数据
int n;
scanf("%d\n", &n);
int *a = (int *)malloc(sizeof(int) * n);
if(a == NULL){
printf("Failed Malloc!\n");
return -1;
}
for(int i = 0; i < n; i++){
scanf("%d", a + i);
}
//构造数组dp,维护子问题的解
int *dp = (int *)malloc(sizeof(int) * n);
if(dp == NULL){
printf("Failed Malloc!\n");
return -1;
}
for(int i = 0; i < n; i++){
if(i == 0){
dp[i] = a[0];
}
else if(i == 1){
dp[i] = a[0] + a[1];
}
else{
int tmp = dp[i - 1] < dp[i -2] ? dp[i - 1] : dp[i - 2];
dp[i] = tmp + a[i];
}
}
//dp[n - 1]即为所求结果,打印即可
printf("%d\n", dp[n - 1]);
//释放空间
free(a);
free(dp);
return 0;
}