#include using namespace std; int main() { int N; cin >> N; vector A(N); for (int i = 0; i < N; i++) cin >> A[i]; vector len, cnt; int s = -1; int c = 0; for (int i = 0; i <= N; i++) { if (i == N || A[i] == 2) { len.push_back(i - s - 1); cnt.push_back(c); s = i; c = 0; } if (i != N && A[i] == 1) c++; } int M = len.size(); vector> dp(M+1, vector(N+1, 1 << 30)); dp[0][0] = 0; for (int i = 0; i < M; i++) { for (int j = N; j >= 0; j--) { if (j - len[i] >= 0 && dp[i][j-len[i]] != 1 << 30) { dp[i+1][j] = min(dp[i+1][j], dp[i][j-len[i]] + cnt[i]); } dp[i+1][j] = min(dp[i+1][j], dp[i][j]); } } int count = 0; for (int i = 0; i < N; i++) if (A[i] == 0) count++; int ans = dp[M][count]; if (ans == 1 << 30) ans = -1; cout << ans << endl; }