Problem Description
2 1 1 3
4
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int const MAX = 2005;
int const INF = 0x3fffffff;
int dp[MAX][MAX], a[MAX], b[MAX];
int main()
{
int n, k;
while(scanf("%d %d", &n, &k) != EOF)
{
for(int i = 1; i <= n; i++)
scanf("%d", &a[i]);
sort(a + 1, a + n + 1);
int sum = 0;
for(int i = 1; i < n; i++)
b[i] = (a[i + 1] - a[i]) * (a[i + 1] - a[i]);
n --;
for(int i = 0; i <= n; i++)
{
for(int j = 0; j <= k; j++)
dp[i][j] = INF;
dp[i][0] = 0;
}
dp[1][1] = b[1];
for(int i = 2; i <= n; i++)
for(int j = 1; j <= k; j++)
dp[i][j] = min(dp[i - 1][j], dp[i - 2][j - 1] + b[i]);
printf("%d\n", dp[n][k]);
}
}版权声明:本文为博主原创文章,未经博主允许不得转载。
原文:http://blog.csdn.net/tc_to_top/article/details/46897927