当然,还可以加滚动数组优化。

#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<memory.h>
#include<cmath>
#include<algorithm>
using namespace std;
const long long  inf=1000000000000000000;
long long  p[2010],dp[2010][2010];
int main()
{
    int n,K,i,j;
    while(~scanf("%d%d",&n,&K)){
        for(i=1;i<=n;i++) 
         scanf("%lld",&p[i]);
        for(i=0;i<=n;i++) dp[i][0]=0;
        sort(p+1,p+n+1);
        for(i=1;i<=n;i++)
         for(j=1;j<=i;j++) dp[i][j]=inf;
        for(i=1;i<=n;i++){
            for(j=1;j<=i;j++){
                if(i-1>=j) dp[i][j]=min(dp[i][j],dp[i-1][j]);
                if(j>=2) dp[i][j]=min(dp[i][j],(dp[i-2][j-2]+(p[i-1]-p[i])*(p[i-1]-p[i])));
            }
        }
        printf("%lld\n",dp[n][2*K]);
    }
    return 0;
} 
 

 

相关文章:

  • 2021-08-27
  • 2022-03-02
  • 2021-08-24
  • 2022-02-28
  • 2022-12-23
  • 2022-02-23
  • 2021-10-06
  • 2022-12-23
猜你喜欢
  • 2021-06-02
  • 2021-07-06
  • 2022-12-23
  • 2022-12-23
  • 2022-01-05
  • 2021-12-31
相关资源
相似解决方案