孩子快绷不住了
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std ;
#define int long long
int n , m , c , a[505] , b[505] , t[505] , d[505] , s[505] , f[505][105] ;
signed main ( ) {
cin >> n >> m ;
for ( int i = 1 ; i <= n ; ++ i )
cin >> a [ i ] ;
sort ( a + 1 , a + 1 + n ) ;
for ( int i = 1 ; i <= n ; ++ i ) {
if ( a [ i ] != a [ i - 1 ] )
b [ ++ c ] = a [ i ] ;
++ t [ c ] ;
}
for ( int i = 1 ; i <= c ; ++ i )
d [ i ] = d [ i - 1 ] + t [ i ] ;
for ( int i = 1 ; i <= c ; ++ i )
s [ i ] = s [ i - 1 ] + b [ i ] * t [ i ] ;
memset ( f , 0x3f , sizeof ( f ) ) ;
f [ 0 ] [ 0 ] = 0 ;
for ( int i = 1 ; i <= c ; ++ i ) {
f [ i ] [ 0 ] = b [ i ] * d [ i ] - s [ i ] ;
for ( int j = 1 ; j < i ; ++ j ) {
for ( int k = 0 ; k < m ; ++ k ) {
int ik = max ( 0ll , b [ j ] + k + m - b [ i ] ) ;
f [ i ] [ ik ] = min ( f [ i ] [ ik ] , f [ j ] [ k ] + ( b [ i ] + ik ) * ( d [ i ] - d [ j ] ) - ( s [ i ] - s [ j ] ) ) ;
}
}
for ( int j = 1 ; j < m ; ++ j )
f [ i ] [ j ] = min ( f [ i ] [ j ] , f [ i ] [ j - 1 ] ) ;
}
cout << f [ c ] [ m - 1 ] << "\n" ;
return 0 ;
}