http://acm.hdu.edu.cn/showproblem.php?pid=1421
2A 之前在实验室写的时候排好了序 没打完 回来重打的时候忘记了排序。。
View Code
1 #include <iostream> 2 #include<cstdio> 3 #include<string.h> 4 #include<algorithm> 5 #define INF 0xffffff 6 using namespace std; 7 int w[2011]; 8 __int64 dp[2011][1011]; 9 int main() 10 { 11 int i,j,k,n,m; 12 while(scanf("%d%d",&n,&k)!=EOF) 13 { 14 for(i = 1; i <= n ; i++) 15 scanf("%d",&w[i]); 16 sort(w+1,w+n+1); 17 for(i = 0; i <= n ; i++) 18 dp[i][0] = 0; 19 for(i = 1; i <= n ; i++) 20 { 21 for(j = 1 ; j <= i/2 ; j++) 22 { 23 if(j==i/2&&i%2==0) 24 dp[i][j] = dp[i-2][j-1]+(w[i]-w[i-1])*(w[i]-w[i-1]); 25 else 26 dp[i][j] = min(dp[i-2][j-1]+(w[i]-w[i-1])*(w[i]-w[i-1]),dp[i-1][j]); 27 } 28 } 29 printf("%I64d\n",dp[n][k]); 30 } 31 return 0; 32 }