Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define int long long
- using namespace std;
- int a[100010], w[4010], dp[4010][4010];
- short tr[1010][1010];
- // 50%, TLE??
- int cost(int L, int R) {
- int mid = (L + R) >> 1;
- return a[mid] * (mid+mid-L-R) - w[mid-1] + w[L-1] + w[R] - w[mid];
- }
- signed main(){
- int n, K;
- cin >> n >> K;
- for(int i=0;i<n;i++) {
- cin >> a[i];
- }
- sort(a, a+n);
- w[0] = a[0];
- for(int i=1;i<n;i++) {
- w[i] = w[i-1] + a[i];
- }
- for(int i=0;i<n;i++) {
- dp[1][i] = cost(0, i);
- }
- for(int i=2;i<=K;i++) {
- tr[i][n] = n-2;
- for(int j=n-1;j>=i-1;j--) {
- dp[i][j] = 1e18;
- for(int k=tr[i-1][j];k<=tr[i][j+1];k++) {
- int tmp = dp[i-1][k] + cost(k+1, j);
- if(dp[i][j] > tmp) {
- dp[i][j] = tmp, tr[i][j] = k;
- }
- }
- }
- }
- cout << dp[K][n-1] << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement