1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
#include <stdlib.h> #include <string.h> #define min(x,y) (x)<(y)?(x):(y) #define INF 0x7fffffff int dp[2000][1000]; int w[2000]; int (const void *a,const void *b) { return *(int *)a - *(int *)b; } int main() { int n,k; int i,j; while (scanf("%d%d",&n,&k)!=EOF) { for ( i = 1; i <= n;i++) scanf("%d",&w[i]); qsort(w+1,n,sizeof(w[1]),cmp); for ( i = 0; i <= n; i++) { dp[i][0] = 0; for ( j = 1; j<=k; j++) dp[i][j] = INF; } for ( i = 2; i <= n; i++) { for (j = 1; j <= i/2 ;j++) dp[i][j] = min(dp[i-1][j],dp[i-2][j-1] + (w[i]-w[i-1])*(w[i]-w[i-1])); } printf("%dn",dp[n][k]); } return 0; }
|
近期评论