#include<bits/stdc++.h>
using namespace std;
const int m=0x3f3f3f3f;
int a[2005];
int dp[2005][2005];//d[i][j]表示在前i个物体中拿走j个物体的最小疲劳度
int main()
{
int n,k;
while(~scanf("%d%d",&n,&k)){
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
sort(a+1,a+1+n);
memset(dp,0,sizeof(dp));
for(int i=1;i<n;i++){
for(int j=1;j<=n;j++){
dp[i][j]=m;
}
}
for(int i=2;i<=n;i++){
for(int j=2;j<=i;j+=2){
dp[i][j]=min(dp[i-1][j],dp[i-2][j-2]+(a[i]-a[i-1])*(a[i]-a[i-1]));
}
}
printf("%d\n",dp[n][2*k]);
}
return 0;
}
hdu1421
最新推荐文章于 2021-07-18 11:16:08 发布