Advertisement
Kaidul

103 Stacking Boxes

Jun 5th, 2013
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.67 KB | None | 0 0
  1. #include <algorithm>
  2. #include <bitset>
  3. #include <cctype>
  4. #include <cmath>
  5. #include <complex>
  6. #include <cstdio>
  7. #include <cstdlib>
  8. #include <cstring>
  9. #include <ctime>
  10. #include <deque>
  11. #include <fstream>
  12. #include <iostream>
  13. #include <list>
  14. #include <climits>
  15. #include <map>
  16. #include <memory>
  17. #include <queue>
  18. #include <set>
  19. #include <sstream>
  20. #include <stack>
  21. #include <string>
  22. #include <utility>
  23. #include <vector>
  24. #include <iomanip>
  25. using namespace std;
  26. /*** typedef ***/
  27. #define MEMSET_INF 127
  28. #define MEMSET_HALF_INF 63
  29. #define stream istringstream
  30. #define rep(i,n) for(__typeof(n) i=0; i<(n); i++)
  31. #define repl(i,n) for(__typeof(n) i=1; i<=(n); i++)
  32. #define FOR(i,a,b) for(__typeof(b) i=(a); i<=(b); i++)
  33. #define INF (1<<30)
  34. #define PI acos(-1.0)
  35. #define pb push_back
  36. #define ppb pop_back
  37. #define all(x) x.begin(),x.end()
  38. #define mem(x,y) memset(x,y,sizeof(x))
  39. #define memsp(x) mem(x,MEMSET_INF)
  40. #define memdp(x) mem(x,-1)
  41. #define memca(x) mem(x,0)
  42. #define eps 1e-9
  43. #define pii pair<int,int>
  44. #define pmp make_pair
  45. #define ft first
  46. #define sd second
  47. #define vi vector<int>
  48. #define vpii vector<pii>
  49. #define si set<int>
  50. #define msi map<string , int >
  51. #define mis map<int , string >
  52. typedef long long i64;
  53. typedef unsigned long long ui64;
  54. /** function **/
  55. #define SDi(x) sf("%d",&x)
  56. #define SDl(x) sf("%lld",&x)
  57. #define SDs(x) sf("%s",x)
  58. #define SD2(x,y) sf("%d%d",&x,&y)
  59. #define SD3(x,y,z) sf("%d%d%d",&x,&y,&z)
  60. #define pf printf
  61. #define print(x) pf("%d ", x)
  62. #define println(x) pf("%d\n", x)
  63. #define sf scanf
  64. #define READ(f) freopen(f, "r", stdin)
  65.  
  66. /* Main Code */
  67.  
  68. #define Range 10
  69. #define MAX 30
  70.  
  71. struct Box {
  72.     int pos, data[Range + 1];
  73. }boxes[MAX + 1];
  74.  
  75. int dimension, k, n, dp[MAX + 1], pos;
  76.  
  77. bool compare(Box a, Box b) {
  78.     rep(i, dimension)
  79.         if(a.data[i] > b.data[i])
  80.             return false;
  81.     return true;
  82. }
  83.  
  84. bool isNested(Box a, Box b) {
  85.     rep(i, dimension)
  86.         if(a.data[i] >= b.data[i])
  87.             return false;
  88.     return true;
  89. }
  90.  
  91.  
  92. int Lis() {
  93.     rep(i, k) dp[i] = 1;
  94.     rep(i, k)
  95.         FOR(j, i + 1, k)
  96.             if(isNested(boxes[i], boxes[j]))
  97.                 if(dp[j] < dp[i] + 1)
  98.                     dp[j] = dp[i] + 1;
  99.  
  100.     int maxLength = 0;
  101.     rep(i, k)
  102.         if(maxLength < dp[i])
  103.             maxLength = dp[i], pos = i;
  104.  
  105.     return maxLength;
  106. }
  107.  
  108. vector <int> listSequence;
  109. void sequence() {
  110.     listSequence.clear();
  111.     listSequence.pb(boxes[pos].pos);
  112.     for(int i = pos - 1; i >= 0; i--) {
  113.         if( isNested(boxes[i], boxes[pos]) &&  dp[i] == dp[pos] -1) {
  114.             pos = i;
  115.             listSequence.pb(boxes[i].pos);
  116.         }
  117.     }
  118.     for(int i = listSequence.size() -1; i >= 0; i--)
  119.         cout << listSequence[i] << " ";
  120.     pf("\n");
  121. }
  122.  
  123. int main() {
  124.     #ifndef ONLINE_JUDGE
  125.         freopen("input.txt", "r", stdin);
  126.     #endif
  127.     int d;
  128.     while(SD2(k, n) == 2) {
  129.         dimension = n;
  130.         rep(i, k) {
  131.             boxes[i].pos = i + 1;
  132.             rep(j, dimension)
  133.                 SDi(d), boxes[i].data[j] = d;
  134.             sort(boxes[i].data, boxes[i].data + n);
  135.         }
  136. #ifndef ONLINE_JUDGE
  137.         rep(i, k) {
  138.             print(boxes[i].pos);
  139.             rep(j, dimension)
  140.                 print(boxes[i].data[j]);
  141.             pf("\n");
  142.         }
  143.         pf("\n");
  144. #endif
  145.         sort(boxes, boxes + k, compare);
  146. #ifndef ONLINE_JUDGE
  147.         pf("After Sort:\n");
  148.         rep(i, k) {
  149.             print(boxes[i].pos);
  150.             rep(j, dimension)
  151.                 print(boxes[i].data[j]);
  152.             pf("\n");
  153.         }
  154.         pf("\n");
  155. #endif
  156.         println(Lis());
  157.         sequence();
  158.     }
  159.     return EXIT_SUCCESS;
  160. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement