hdu 1421

#include"stdio.h"
#include"stdlib.h"
#include"string.h"

int a[2005],dp[2005][1005];

int cmp(const void *a,const void *b)
{
    return *(int*)a-*(int*)b;
}
int min(int a,int b)
{
    return a<b?a:b;
}

int main( )
{
    int n,k,i,j;
    while(~scanf("%d%d",&n,&k))
    {
        for(i=1;i<=n;i++)
            scanf("%d",&a[i]);
        qsort(a+1,n,sizeof(int),cmp);
        for(i=0;i<=n;i++)
            for(j=1;2*j<=n;j++)
                dp[i][j]=0xfffffff;
        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]+(a[i]-a[i-1])*(a[i]-a[i-1]),dp[i-1][j]);
        printf("%d\n",dp[n][k]);
    }
    return 0;
}

    

 

 

posted @ 2012-07-24 09:42  朝圣の路  阅读(189)  评论(0编辑  收藏  举报