1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 #include
20 #include
21 using namespace std;
22 const int N=2010;
23 int a[N];
24 int n,m;
25 int ans[N][N/2];
26 void DP()
27 {
28 memset(ans,0,sizeof(ans));
29 sort(a+1,a+n+1);
30 for(int k=1;k<=m;k++)
31 for(int i=k+k;i<=n;i++)
32 {
33 ans[i][k]=ans[i-2][k-1]+(a[i]-a[i-1])*(a[i]-a[i-1]);
34 if(i-1>=k+k&&ans[i-1][k]<ans[i][k])
35 ans[i][k]=ans[i-1][k];
36 }
37 }
38 int main()
39 {
40 while(scanf("%d %d",&n,&m)!=EOF)
41 {
42 for(int i=1;i<=n;i++)
43 scanf("%d",&a[i]);
44 DP();
45 printf("%d\n",ans[n][m]);
46 }
47 }
hdu1421 参考答案 (2008-11-12 14:25:05由218编辑)