Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _USE_MATH_DEFINES
- #include <iostream>
- #include <string>
- #include <map>
- #include <set>
- #include <algorithm>
- #include <vector>
- #include <stdio.h>
- #include <cmath>
- #include <math.h>
- #include <queue>
- #include <stack>
- #include <climits>
- #include <deque>
- #include <ctime>
- using namespace std;
- typedef long long ll;
- typedef unsigned long long ull;
- typedef unsigned int ui;
- #define mh() make_heap()
- #define poph() pop_heap()
- #define pushh() push_heap()
- #define sor(n) n.begin(), n.end()
- #define mp make_pair
- #define files freopen("vampire.in", "rt", stdin); freopen("vampire.out", "wt", stdout)
- #define formx(a1,b1,c1,a2,b2,c2) ((a1*c2-a2*c1)/(a1*b2-b1*a2))
- #define formy(a1,b1,c1,a2,b2,c2) ((c1*b2-c2*b1)/(a1*b2-b1*a2))
- #define forma(y1,y2) (y2-y1)
- #define formb(x1,x2) (x1-x2)
- #define formc(x1,y1,x2,y2) (x1*(y2-y1)-y1*(x2-x1))
- #define ras(x1,y1,x2,y2) sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1))
- struct cord
- {
- double x1, y1, x2, y2;
- };
- struct limcord
- {
- double x, y;
- bool good;
- };
- bool checkparal(double a1, double a2, double b1, double b2)
- {
- return a1 / b1 == a2 / b2;
- }
- limcord findt(cord c, cord now)
- {
- double a1 = forma(now.y1, now.y2);
- double b1 = formb(now.x1, now.x2);
- double c1 = formc(now.x1, now.y1, now.x2, now.y2);
- double a2 = forma(c.y1, c.y2);
- double b2 = formb(c.x1, c.x2);
- double c2 = formc(c.x1, c.y1, c.x2, c.y2);
- if (!checkparal(a1, a2, b1, b2))
- {
- double x = formx(a1, b1, c1, a2, b2, c2);
- double y = formy(a1, b1, c1, a2, b2, c2);
- return{ x,y, true };
- }
- else
- {
- return{ NULL,NULL, false };
- }
- }
- bool checkT(limcord now, cord ot)
- {
- if (ras(ot.x1, ot.y1, ot.x2, ot.y2) == ras(ot.x1, ot.y1, now.x, now.y) + ras(ot.x2, ot.y2, now.x, now.y))
- return true;
- else
- return false;
- }
- ll dp[501][501];
- int main()
- {
- //files;
- ll n, k;
- for (ll i = 0; i <= 500; i++)
- {
- for (ll j = 0; j <= 500; j++)
- dp[i][j] = INT_MAX;
- }
- cin >> n >> k;
- ll hour, last = 1;
- ll white = 0, black = 0;
- ll w[501];
- ll b[501];
- for (ll i = 1; i <= n; i++)
- {
- cin >> hour;
- if (hour == 0)
- white++;
- else
- black++;
- w[i] = white;
- b[i] = black;
- hour = black*white;
- dp[1][i] = hour;
- }
- for (ll i = 2; i <= k; i++)
- {
- for (ll j = i; j <= n-i+2; j++)
- {
- dp[i][j] = dp[i - 1][j - 1];
- for (ll l = 1; l <= n-j+1; l++)
- {
- dp[i][l] = min(dp[i][l], dp[i-1][j] + ((w[l+j] - w[j - 1])*(b[l+j] - b[j - 1])));
- }
- }
- }
- cout << dp[k][n];
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement