2 1 1 3
4
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int n,k,i,j,m,p;
__int64 s[2002],dp[2002][1001],w[2002];
while(scanf("%d%d",&n,&k)!=EOF)
{
s[0]=0;
for(i=1;i<=n;i++)
scanf("%I64d",&s[i]);
sort(s+1,s+n+1);
for(i=1;i<=n;i++)
w[i]=(s[i]-s[i-1])*(s[i]-s[i-1]);
memset(dp,0,sizeof(dp));
for(i=0;i<2002;i++)
for(j=1;j<=k;j++)
dp[i][j]=INT_MAX;
for(i=2;i<=n;i++)
for(j=1;j<=k;j++)
{
if(dp[i-1][j]<dp[i-2][j-1]+w[i])
dp[i][j]=dp[i-1][j];
else dp[i][j]=dp[i-2][j-1]+w[i];
}
printf("%I64d\n",dp[n][k]);
}
return 0;
} 原文:http://blog.csdn.net/yuhaojia/article/details/23621797