hdu 1421 搬寝室(dp)

#include<cstdio>

#include<cmath>

#include<cstring>

#include<iostream>

#include<algorithm>

using namespace std;

#define INF 10000000

int a[3000];

int now[3000];

int dp[2000+100][2000+100];

int main()

{

  int n,k;

  int i,j;

  while(scanf("%d%d",&n,&k)!=EOF)

  {

    for(i=0;i<n;i++) scanf("%d",&a[i]);

    sort(a,a+n);

    for(i=1;i<n;i++) now[i]=(a[i]-a[i-1])*(a[i]-a[i-1]);

    dp[0][0]=0;

    for(i=0;i<=n;i++)

    {

      for(j=1;j<=k;j++)

        dp[i][j]=INF;

    }

    for(i=2;i<=n;i++)

    {

      for(j=1;j*2<=i;j++)

      {

        dp[i][j]=min(dp[i-1][j],dp[i-2][j-1]+now[i-1]);

      }

    }

    printf("%d\n",dp[n][k]);

  }

  return 0;

}

  

你可能感兴趣的:(HDU)