http://acm.hdu.edu.cn/showproblem.php?pid=1421
// 1274154 2009-04-15 18:46:58 Accepted 1421 187MS 8100K 793 B C++ no way 
/**/ /*
8 3 
1 1 5 6 7 9 11 13
*/

#include
< iostream >
#include
< algorithm >
#define  MIN(x,y) x<y?x:y
using   namespace  std;
bool  comp( int  a, int  b)
{
    
return a<b;
}

int  dp[ 2001 ][ 1001 ]; // dp[i][j]表示从1……i个物品中选取j对
int  num[ 2001 ];
int  main()
{
    
int n,k,i,j;
    
while(cin>>n>>k)
    
{
        
int weights[2001];
        
for(i=1;i<=n;i++)
            cin
>>weights[i];

        sort(weights
+1,weights+n+1,comp);

        
for(i=1;i<n;i++)
            num[i] 
= (weights[i+1- weights[i]) * (weights[i+1- weights[i]);

        
for(i=0;i<=n;i++)//物品
            for(j=1;j<=k;j++)//所取物品对数
                dp[i][j] = 100000000;//要足够大
    
        
for(i=0;i<=n;i++)
            dp[i][
0= 0;

        
for(i=2;i<=n;i++)//物品
        {
            
for(j=1;2*j<=i;j++)//所取物品对数
            {
                dp[i][j] 
= MIN(dp[i-2][j-1+ num[i-1] , dp[i-1][j]);
            }

        }

        cout
<<dp[n][k]<<endl;
    }

    
return 0;
}