Advertisement
giangvi

uva103-other

Mar 13th, 2011
451
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.88 KB | None | 0 0
  1. #include <algorithm>
  2. #include <vector>
  3. using namespace std;
  4.  
  5. struct node {
  6.     int id;
  7.     int d [12];
  8. } a [32];
  9.  
  10. int k;
  11. int n;
  12. int best [32];
  13. int parent [32];
  14. vector <int> v;
  15.  
  16. bool cmp (int x, int y)
  17. {
  18.     for ( int i = 0; i < n; i++ ) {
  19.         if ( a [x].d [i] <= a [y].d [i] )
  20.             return false;
  21.     }
  22.  
  23.     return true;
  24. }
  25.  
  26. void print_path (int x)
  27. {
  28.     if ( x == parent [x] )
  29.         return ;
  30.  
  31.     print_path (parent [x]);
  32.  
  33.     v.push_back (a [parent [x]].id);
  34. }
  35.  
  36. int lis ()
  37. {
  38.     for ( int i = 0; i < k; i++ ) {
  39.         best [i] = 1;
  40.         parent [i] = i;
  41.     }
  42.  
  43.     for ( int i = 1; i < k; i++ ) {
  44.         for ( int j = 0; j < i; j++ ) {
  45.             if ( cmp (i, j) && best [i] < best [j] + 1 ) {
  46.                 best [i] = best [j] + 1;
  47.                 parent [i] = j;
  48.             }
  49.         }
  50.     }
  51.  
  52.     int index;
  53.     int max = 0;
  54.  
  55.     for ( int i = 0; i < k; i++ ) {
  56.         if ( max < best [i] ) {
  57.             max = best [i];
  58.             index = i;
  59.         }
  60.     }
  61.  
  62.     print_path (index);
  63.  
  64.     v.push_back (a [index].id);
  65.  
  66.     return max;
  67. }
  68.  
  69. int main ()
  70. {
  71.     while ( scanf ("%i %i", &k, &n) != EOF ) {
  72.         v.clear ();
  73.  
  74.         for ( int i = 0; i < k; i++ ) {
  75.  
  76.             a [i].id = i + 1;
  77.  
  78.             for ( int j = 0; j < n; j++ )
  79.                 scanf ("%d", &a [i].d [j]);
  80.  
  81.             sort (a [i].d, a [i].d + n );
  82.         }
  83.  
  84.         // bubble sort
  85.         for ( int i = 0; i < k; i++ ) {
  86.             for ( int j = i + 1; j < k; j++ ) {
  87.                     if ( cmp (i, j) )
  88.                         swap (a [i], a [j]);
  89.             }
  90.         }
  91.  
  92.         printf ("%d\n", lis ());
  93.  
  94.         for ( unsigned int i = 0; i < v.size (); i++ ) {
  95.             if ( i != 0 )
  96.                 printf (" ");
  97.             printf ("%d", v.at (i));
  98.         }
  99.  
  100.         printf ("\n");
  101.  
  102.     }
  103.     return 0;
  104. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement