#include <iostream>
#include <cstring>
using namespace std;
#define INF (1<<28)
int cut[10000] , n;
#define rep(i,n) for(int i = 0 ; i < n ; i++)
int dp[2][5001][2];
/*
int dfs(int pos,int amount){
	if(amount > n/2) return INF;
	if(pos == n) return amount == n/2 ? 0 : INF;
	int ans = INF;
	for(int i = 1 ; i+pos <= n ; i++){
		ans = min( dfs( i+pos , amount+i) + cut[pos+i-1] , ans );
		ans = min( dfs( i+pos , amount  ) + cut[pos+i-1] , ans );
	}
	return ans;
}
*/
int main(){
	cin >> n;
	rep(i,n-1) cin >> cut[i];
	rep(i,2)rep(j,5001)rep(k,2) dp[i][j][k] = INF;
	dp[0][0][0] = 0;
	dp[0][0][1] = 0;
	rep(i,n){
		rep(amount,n/2+1) rep(f,2) dp[(i+1)&1][amount][f] = INF;
		rep(amount,n/2+1){
			rep(f,2){
				if(f == 0){
					dp[(i+1)&1][amount+1][0] = min( dp[(i+1)&1][amount+1][0] , dp[i&1][amount][f] );
					dp[(i+1)&1][amount+1][1] = min( dp[(i+1)&1][amount+1][1] , cut[i] + dp[i&1][amount][f] );
				}else{
					dp[(i+1)&1][amount  ][1] = min( dp[(i+1)&1][amount  ][1] , dp[i&1][amount][f] );
					dp[(i+1)&1][amount  ][0] = min( dp[(i+1)&1][amount  ][0] , cut[i] + dp[i&1][amount][f] );
				}
			}
		}
	}
	cout << min(dp[n&1][n/2][0],dp[n&1][n/2][1]) << endl;
}