// Created On : 2026-10-06 22:13:09 #include #include using namespace std; #define ll long long #define returnNO {std::cout << "NO\n"; return;} #define returnYES {std::cout << "YES\n"; return;} #define returnAns(x) {cout << x << "\n"; return;} template using MaxHeap = std::priority_queue, std::less>; template using MinHeap = std::priority_queue, std::greater>; const int MOD1 = 1000000007; const int MOD2 = 998244353; /** obs ** **/ void solve(int test_case_index) { int n; cin >> n; vector row(n); for (int& a: row) cin >> a; // only build carni sum vector> arr; arr.reserve(n); // (len, 0s) int last = -1, carni = 0; for (int i = 0; i < n; ++i) { if (row[i] == 2) { if (carni) arr.push_back({i - last - 1, carni}); last = i, carni = 0; } else if (row[i] == 0) carni += 1; } if (carni) arr.push_back({n - 1 - last, carni}); int m = arr.size(), total_carni = 0; vector ans(n + 1, INT_MAX); ans[0] = 0; for (auto [l, c] : arr) { for (int s = n - l; s >= 0; --s) ans[s + l] = min(ans[s + l], ans[s] + (l - c)); total_carni += c; } if (ans[total_carni] >= INT_MAX) returnAns(-1) returnAns(ans[total_carni]) } void preComp() { } int main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); preComp(); int t = 1; // std::cin >> t; for (int i = 1; i <= t; ++i) solve(i); return 0; }