#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 10010;
int n;
int a[N];
int f[N][2]; // 第二维为0的话表示到达某一层是跳上来的,为1表示爬上来的。
// 一开始做时根本没想第二维,但是怎么做也做不对,所以又想了一下,其实上楼的过程是有限制的,
// 比如这一层是跳上来的话,上一层一定是爬上来的,这一层是爬上来的,那么上一层既可以是跳上来的,也可以是爬上来的。
int main()
{
cin >> n;
for (int i = 1; i <= n; i++) cin >> a[i];
f[1][0] = 0;
f[1][1] = a[1];
for (int i = 2; i <= n; i++)
{
f[i][0] = min(f[i - 1][1], f[i - 2][1]);
f[i][1] = min(f[i - 1][0], f[i - 1][1]) + a[i]; // 这个不应该是a[i]-a[i-1]吗?但是因为样例没过,所以改了一下,居然才对了。。。
}
cout << min(f[n][0], f[n][1]) << endl;
return 0;
}