萌新四边形优化
查看原帖
萌新四边形优化
126972
Kevinx楼主2023/12/17 22:11

求邦邦,样例都没过。。。

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 3005;
ll n, m, a[N];
ll f[N][N], dp[N][305], s[N][305];
void init(){
	memset(dp, 127, sizeof dp);
//	dp[0][0] = 0;
	for(int i = 1; i <= n; i++) s[i][0] = 1, dp[i][1] = f[1][i];
//	cout << f[1][n] << endl;
	for(int j = 1; j <= m; j++) s[n + 1][j] = n - 1;
}
int main (){
	scanf("%d%d", &n, &m);
	for(int i = 1; i <= n; i++) scanf("%d", &a[i]);
	sort(a + 1, a + n + 1);
	for(int i = 1; i <= n; i++) {
		for(int j = i + 1; j <= n; j++) 
		    f[i][j] = f[i][j - 1] + (a[j] - a[(i + j)/2]);
	}
	init();
	for(int j = 1; j <= m; j++) {
		for(int i = n; i >= 1; i--) {
			for(int k = s[i][j - 1]; k <= s[i + 1][j]; k++)
			if(dp[k][j - 1] + f[k + 1][j] < dp[i][j]){
				
				dp[i][j] = dp[k][j - 1] + f[k + 1][j];
				s[i][j] = k;
			}
			if(dp[i][j] == 0)cout << i << " " << j << endl;
		}
	}
	printf("%d", dp[n][m]);
	return 0;
} 
2023/12/17 22:11
加载中...