求助:求hack,求查错
查看原帖
求助:求hack,求查错
68882
灵华楼主2022/4/3 10:46

孩子快绷不住了

#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 ;
}
2022/4/3 10:46
加载中...