#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<vector>
#include<algorithm>
#include<iostream>
#include<time.h>
using namespace std;
int dp[35][205];
int pos[205];
int f[205][205];
const int INF = 0x3f3f3f3f;
int main()
{
int n, k;
int cas = 1;
while (scanf("%d%d", &n, &k) != EOF, n)
{
int i, j, len;
memset(f, 0, sizeof(f));
for (i = 1; i <= n; i++)
{
scanf("%d", &pos[i]);
}
memset(dp, INF, sizeof(dp));
for (i = 1; i <= n; i++)
{
for (j = i + 1; j <= n; j++)
{
for (len = i; len <= j; len++)
f[i][j] += abs(pos[(i + j) / 2] - pos[len]);
}
}
int q;
for (i = 1; i <= n; i++)
{
dp[1][i] = f[1][i];
}
for (i = 2; i <= k; i++)
{
for (j = i; j <= n; j++)
{
for (q = i; q <= j; q++)
dp[i][j] = min(dp[i][j], dp[i - 1][q-1] + f[q][j]);
}
}
printf("Chain %d\nTotal distance sum = %d\n\n", cas++, dp[k][n]);
}
return 0;
}
HDU 1227(区间dp)
最新推荐文章于 2018-08-24 09:03:02 发布
