小牛吃草

李维义  •  1个月前

#include<bits/stdc++.h>
using namespace std;
int dp[1002][1002][2];
int n,l,a[1002];
int main(){
	scanf("%d%d",&n,&l);
	for(int i=1;i<=n;i++)scanf("%d",&a[i]);
	a[++n]=l;
	sort(a+1,a+n+1);
	for(int i=1;i<=n;i++){
		if(a[i]!=l){
			dp[i][i][0]=1e9;
		    dp[i][i][1]=1e9;
		}
		
	}

	for(int i=n;i>0;i--)
		for(int j=i+1;j<=n;j++){
			dp[i][j][0]=min(dp[i+1][j][0]+(a[i+1]-a[i])*(n-j+i),dp[i+1][j][1]+(a[j]-a[i])*(n-j+i));
			dp[i][j][1]=min(dp[i][j-1][0]+(a[j]-a[i])*(n-j+i),dp[i][j-1][1]+(a[j]-a[j-1])*(n-j+i));
		}
	printf("%d\n",min(dp[1][n][1],dp[1][n][0]));
	return 0;
}

暂未启用评论功能。