hdu 1421 搬寢室 詳解
1
#include <iostream>
2
#include <algorithm>
3
using namespace std;
4
5
int cmp( const void *a , const void *b )
6

{
7
return *(int *) a - *(int *) b;
8
}
9
10
int dp[ 2000 ][ 1000 ];
11
12
int main()
13

{
14
15
int n , k , i , j;
16
17
int a[ 2000 ];
18
19
while (scanf ("%d %d" , &n , &k) != EOF)
20
{
21
for(i = 1 ; i <= n ; ++ i)
22
23
scanf ("%d" , &a[ i ]);
24
25
qsort (a , n + 1 , sizeof (a[ 1 ]) , cmp);
26
27
for(i = 1 ; i < n ; ++ i)
28
29
a[ i ] = (a[i + 1] - a[ i ]) * (a[i + 1] - a[ i ]);
30
31
32
for(i = 0 ; i <= n ; ++ i)
33
34
for(j = 1 ; j <= k ; ++ j)
35
36
dp[ i ][ j ] = 100000000;
37
38
39
40
for(i = 0; i <= n; ++ i)
41
42
dp[ i ][ 0 ] = 0;
43
44
45
46
for(i = 2 ; i <= n ; ++ i)
47
48
for(j = 1; 2 * j <= i ; ++ j )
49
{
50
dp[ i ][ j ] = dp[ i - 1 ][ j ];
51
52
if(dp[ i ][ j ] > dp[ i - 2 ][ j - 1] + a[ i - 1] )
53
54
dp[ i ][ j ] = dp[ i - 2 ][ j - 1] + a[ i - 1];
55
}
56
57
printf ("%d\n" , dp[ n ][ k ]);
58
}
59
60
return 23;
61
}

2

3

4

5

6



7

8

9

10

11

12

13



14

15

16

17

18

19

20



21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49



50

51

52

53

54

55

56

57

58

59

60

61

posted on 2009-04-18 15:37 此最相思 閱讀(843) 評(píng)論(3) 編輯 收藏 引用 所屬分類: dp