#include<iostream>
using namespace std;
int h[10006];
int d[10006][2]; // 每一
//int fun(int a,int b){
// if(a<0)
// return 0;
// if(b==0){
// if(d[a-1][0]<d[a-1][1]){
// cout<<d[a-1][0]<<" "<<a-1<<" "<<0<<endl;
// fun(a-1,0);
// }else{
// cout<<d[a-1][1]<<" "<<a-1<<" "<<1<<endl;
// fun(a-1,1);
// }
// }else{
// if(d[a-1][0] < d[a-2][0]){
// cout<<d[a-1][0]<<" "<<a-1<<" "<<0<<endl;
// fun(a-1,0);
// }else{
// cout<<d[a-2][0]<<" "<<a-2<<" "<<0<<endl;
// fun(a-2,0);
// }
// }
//}
int main(){
int n;
while(cin>>n){
for(int i=0;i<n;i++){
cin>>h[i];
}
// 0 not
// 1 do
d[0][0] = h[0];
d[0][1] = 0;
d[1][0] = h[1];
d[1][1] = 0;
for(int i=2;i<n;i++){
d[i][0] = min(d[i-1][1], d[i-1][0]) + h[i];
d[i][1] = min(d[i-1][0], d[i-2][0]); // 这一层飞了的时间数,和上一层没有飞,以及上上一层没有飞花费的时间数是一样的
}
// for(int j=0;j<2;j++){
// for(int i=0;i<n;i++){
// cout<< d[i][j]<<" ";
// }
// cout<<endl;
// }
//
// if((d[n-1][0]<d[n-1][1])){
// cout<<d[n-1][0]<<" "<<n-1<<" "<<0<<endl;
// fun(n-1,0);
// }else{
// cout<<d[n-1][1]<<" "<<n-1<<" "<<1<<endl;
// fun(n-1,1);
// }
cout<< min(d[n-1][0],d[n-1][1]) <<endl;
}
}
伟大的动态规划,我真是愚蠢