The state transition equation is still hard to find ......
I felt that my analysis was not in place, and I still referred to others' analysis ......
[Cpp]
# Include <iostream>
# Include <cstdio>
# Include <cmath>
# Include <algorithm>
# Include <cstring>
# Deprecision MAX 2005
Using namespace std;
Int n, k;
Int a [MAX];
Int dp [MAX] [MAX]; // select the minimum fatigue degree of the j pair in the previous item
Int value (int I, int j)
{
Return (I-j) * (I-j );
}
Void solve ()
{
Int I, j;
For (I = 2; I <= n; I ++)
{
For (j = 1; j <= k; j ++)
{
If (I = 2 * j)
Dp [I] [j] = dp [I-2] [J-1] + value (a [I], a [I-1]);
Else
Dp [I] [j] = min (dp [I-2] [J-1] + value (a [I], a [I-1]), dp [I-1] [j]);
}
}
}
Int main ()
{
Int I;
While (cin> n> k)
{
For (I = 1; I <= n; I ++)
Scanf ("% d", & a [I]);
Sort (a + 1, a + n + 1 );
Memset (dp, 0, sizeof (dp ));
Solve ();
Printf ("% d \ n", dp [n] [k]);
}
Return 0;
}
# Include <iostream>
# Include <cstdio>
# Include <cmath>
# Include <algorithm>
# Include <cstring>
# Deprecision MAX 2005
Using namespace std;
Int n, k;
Int a [MAX];
Int dp [MAX] [MAX]; // select the minimum fatigue degree of the j pair in the previous item
Int value (int I, int j)
{
Return (I-j) * (I-j );
}
Void solve ()
{
Int I, j;
For (I = 2; I <= n; I ++)
{
For (j = 1; j <= k; j ++)
{
If (I = 2 * j)
Dp [I] [j] = dp [I-2] [J-1] + value (a [I], a [I-1]);
Else
Dp [I] [j] = min (dp [I-2] [J-1] + value (a [I], a [I-1]), dp [I-1] [j]);
}
}
}
Int main ()
{
Int I;
While (cin> n> k)
{
For (I = 1; I <= n; I ++)
Scanf ("% d", & a [I]);
Sort (a + 1, a + n + 1 );
Memset (dp, 0, sizeof (dp ));
Solve ();
Printf ("% d \ n", dp [n] [k]);
}
Return 0;
}