#include #include #include #include #include #include #include #include #include #include using namespace std; #define for if(0);else for int solve(vector& black, int N, int K) { vector blacks(N + 1, 0); vector whites(N + 1, 0); vector prev_cost(N + 1, 0); vector cost(N + 1, 0); int num_black = 0; int num_white = 0; prev_cost[0] = 0; for (int i = 1; i <= N; ++i) { if (black[i]) { ++num_black; } else { ++num_white; } prev_cost[i] = num_black * num_white; blacks[i] = num_black; whites[i] = num_white; } cost = prev_cost; for (int k = 1; k < K; ++k) { // for (int i = 0; i <= N; ++i) { // cout << i << " " << prev_cost[i] << endl; // } cost[0] = 0; for (int n = 1; n <= N; ++n) { int mincost = INT_MAX / 2; for (int i = 0; i < n; ++i) { int b = blacks[n] - blacks[i]; int w = whites[n] - whites[i]; int c = prev_cost[i] + b * w; // cout << i << " " << n << " : " << c << " " << b << " " << w << endl; if (c < mincost) { mincost = c; } } cost[n] = mincost; } prev_cost = cost; } return cost[N]; } int main() { int N, K; cin >> N >> K; vector black(N + 1); for (int i = 1; i <= N; ++i) { int x; cin >> x; black[i] = x; } cout << solve(black, N, K) << endl; return 0; }