求助(玄关)
查看原帖
求助(玄关)
1287433
__ycy1124__楼主2024/7/20 08:51
#include<bits/stdc++.h>
using namespace std;
long long int x[3001];
long long int qzh[3001][3001];
long long int dp[3001][301];
long long int work(int l,int r){
	int mid=l+r>>1;
	return qzh[mid][r]-qzh[mid][l-1];
}
int main(){
	int v,p;
	scanf("%d%d",&v,&p);
	for(int i=1;i<=v;i++){
		scanf("%lld",&x[i]);
		//printf("%lld\n",x[i]);
	}
	//printf("--------------------------------------------\n");
	sort(x+1,x+v+1);
	/*for(int i=1;i<=v;i++){
		printf("%lld\n",x[i]);
	}*/
	//printf("--------------------------------------------\n");
	for(int i=1;i<=v;i++){
		for(int j=i-min(i,v-i+1)+1;j<=i+min(i+1,v-i+1)-1;j++){
			qzh[i][j]=qzh[i][j-1]+abs(x[i]-x[j]);
			//printf("%d %d %lld\n",i,j,qzh[i][j]);
		}
	}
	//printf("--------------------------------------------\n");
	for(int i=1;i<=v;i++){
		for(int j=1;j<=p&&j<=i;j++){
			long long int mi=999999999999;
			for(int k=1;k+1<=i;k++){
				mi=min(mi,dp[k][j-1]+work(k+1,i));
			}
			//printf("%d %d %lld\n",i,j,dp[i][j]);
		}
	}
	printf("%lld",dp[v][p]);
	return 0;
} 
2024/7/20 08:51
加载中...