#include<stdlib.h> #include<string.h> #include<math.h> #define inf 0x7fffffff #define MIN(x,y) (x)<(y)?(x):(y) int distance[220]; int depots[35][220]; int cost[220][220]; int() { int n,k,m,p; int i,j; int cases = 1; freopen("Sample Input.txt","r",stdin); while ( scanf("%d%d",&n,&k),n||k) { for ( i = 1; i <= n; i++) scanf("%d",&distance[i]); for ( i = 1; i <= n; i++) { for (j = 1; j <= n; j++) { cost[i][j] = 0; for ( p = i; p <= j; p++) cost[i][j] += abs(distance[p] - distance[(i+j)/2]); } } for ( i = 1; i <= n; i++) depots[1][i] = cost[1][i]; for ( i = 2; i <= k; i++) { for (j = i + 1; j <= n; j++) { depots[i][j] = inf; for ( m = i - 1; m < j; m++) depots[i][j] = MIN(depots[i][j],depots[i-1][m] + cost[m+1][j]); } } printf("Chain %dn",cases++); printf("Total distance sum = %dnn",depots[k][n]); } return0; }
近期评论