hdu 1421 搬寝室 详解

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 = 12 * 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}

你可能感兴趣的:(hdu 1421 搬寝室 详解)