Advertisement
pdpd123

Untitled

Feb 11th, 2020
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.89 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define int long long
  3. using namespace std;
  4.  
  5. int a[100010], w[4010], dp[4010][4010];
  6. short tr[1010][1010];
  7. // 50%, TLE??
  8.  
  9. int cost(int L, int R) {
  10.     int mid = (L + R) >> 1;
  11.     return a[mid] * (mid+mid-L-R) - w[mid-1] + w[L-1] + w[R] - w[mid];
  12. }
  13.  
  14. signed main(){
  15.    
  16.     int n, K;
  17.     cin >> n >> K;
  18.  
  19.     for(int i=0;i<n;i++) {
  20.         cin >> a[i];
  21.     }
  22.  
  23.     sort(a, a+n);
  24.  
  25.     w[0] = a[0];
  26.     for(int i=1;i<n;i++) {
  27.         w[i] = w[i-1] + a[i];
  28.     }
  29.  
  30.     for(int i=0;i<n;i++) {
  31.         dp[1][i] = cost(0, i);
  32.     }
  33.  
  34.     for(int i=2;i<=K;i++) {
  35.         tr[i][n] = n-2;
  36.         for(int j=n-1;j>=i-1;j--) {
  37.             dp[i][j] = 1e18;
  38.             for(int k=tr[i-1][j];k<=tr[i][j+1];k++) {
  39.                 int tmp = dp[i-1][k] + cost(k+1, j);
  40.                 if(dp[i][j] > tmp) {
  41.                     dp[i][j] = tmp, tr[i][j] = k;
  42.                 }
  43.             }
  44.         }
  45.     }
  46.  
  47.     cout << dp[K][n-1] << endl;
  48. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement