Question meaning:
Give you n and n numbers, and select k from them to minimize fatigue ..
Fatigue calculation method: (two-handed item quality difference square ).
Analysis: Sort items first. The minimum value is possible only when two adjacent items are taken ..
Typical DP: dp [I] [j] = min (dp [I-1] [j], dp [I-2] [J-1] + a [I-1]);
Dp [I] [j] indicates that the minimum fatigue value of j items is obtained from I items ..
Www.2cto.com
[Csharp]
# Include "stdio. h"
# Include "string. h"
# Include "algorithm"
# Define MIN (a, B) a> B? B:;
Int dp [2001] [1001];
Int main ()
{
Int n, k, I, j, a [1, 2001];
While (scanf ("% d", & n, & k )! =-1)
{
For (I = 1; I <= n; I ++)
Scanf ("% d", & a [I]);
// Use a sorting method of C ++ .. Www.2cto.com
Std: sort (a + 1, a + 1 + n );
For (I = 1; I <n; I ++)
A [I] = (a [I]-a [I + 1]) * (a [I]-a [I + 1]);
Memset (dp, 127, sizeof (dp ));
For (I = 0; I <= n; I ++) dp [I] [0] = 0;
For (I = 2; I <= n; I ++)
{
For (j = 1; 2 * j <= I; j ++)
Dp [I] [j] = MIN (dp [I-1] [j], dp [I-2] [J-1] + a [I-1]);
}
Printf ("% d \ n", dp [n] [k]);
}
Return 0;
}