Advertisement
pdpd123

Untitled

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