//先排序,之后相邻的肯定是疲劳度最小的。
#include<iostream>
#include<algorithm>
using namespace std;
int pl[2014][1012];
int min(int a,int b)
{
return a<b?a:b;
}
int main()
{
int i,j,k,n,w[2014];
while(cin>>n>>k)
{
for(i=1;i<=n;i++)
cin>>w[i];
sort(w+1,w+n+1);
for(j=1;j<=k;j++) //pl[前i个物品][j对物品]的疲劳
{
pl[2*j][j]=pl[2*j-2][j-1]+(w[2*j]-w[2*j-1])*(w[2*j]-w[2*j-1]);
for(i=j*2+1;i<=n;i++)
{
pl[i][j]=min(pl[i-2][j-1]+(w[i]-w[i-1])*(w[i]-w[i-1]),pl[i-1][j]);
}
}
cout<<pl[n][k]<<endl;
}
return 0;
}
#include<iostream>
#include<algorithm>
using namespace std;
int pl[2014][1012];
int min(int a,int b)
{
return a<b?a:b;
}
int main()
{
int i,j,k,n,w[2014];
while(cin>>n>>k)
{
for(i=1;i<=n;i++)
cin>>w[i];
sort(w+1,w+n+1);
for(j=1;j<=k;j++) //pl[前i个物品][j对物品]的疲劳
{
pl[2*j][j]=pl[2*j-2][j-1]+(w[2*j]-w[2*j-1])*(w[2*j]-w[2*j-1]);
for(i=j*2+1;i<=n;i++)
{
pl[i][j]=min(pl[i-2][j-1]+(w[i]-w[i-1])*(w[i]-w[i-1]),pl[i-1][j]);
}
}
cout<<pl[n][k]<<endl;
}
return 0;
}