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[1010][1010], dp[1010][1010], tr[1010][1010];
- signed main(){
- int n, K;
- cin >> n >> K;
- for(int i=0;i<n;i++) cin >> a[i];
- sort(a, a+n);
- for(int i=0;i<n;i++) {
- for(int j=i+1;j<n;j++) {
- int mid = i + j >> 1;
- w[i][j] = w[i][j-1] + a[j] - a[mid];
- }
- }
- for(int i=0;i<n;i++) {
- dp[0][i] = w[0][i];
- }
- for(int i=1;i<K;i++) {
- for(int j=n-1;j>=i;j--){
- dp[i][j] = 1e18;
- for(int k=tr[i-1][j];k<=tr[i][j+1];k++) {
- int tmp = dp[i-1][k] + w[k+1][j];
- if(dp[i][j] > tmp) {
- dp[i][j] = tmp, tr[i][j] = k;
- }
- }
- }
- }
- cout << dp[K-1][n-1] << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement