#include<stdio.h> #include<algorithm> #define min(a,b) a<b?a:b int n,k; int thing[2001]; int select[2001][1001]; int cmp(const void *a,const void *b) { return *((int*)a)-*((int*)b); } int dp() { qsort(thing+1,n,sizeof(int),cmp); select[0][0]=0; for(int j=1;j<=n;j++) { select[j][0]=0; for(int i=1;i<=j/2;i++) { if(j-1>=2*i) { select[j][i]=min(select[j-1][i],select[j-2][i-1]+(thing[j]-thing[j-1])*(thing[j]-thing[j-1])); } else select[j][i]=select[j-2][i-1]+(thing[j]-thing[j-1])*(thing[j]-thing[j-1]); } } printf("%d\n",select[n][k]); return 0; } int main() { while(scanf("%d%d",&n,&k)!=EOF&&n>=2*k&&n<2000&&k>=1) { for(int i=1;i<=n;i++) scanf("%d",&thing[i]); dp(); } return 0; }