Advertisement
Kaidul

Longest Common Subsequence

Jan 12th, 2013
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.23 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.  
  26. using namespace std;
  27.  
  28. #define REP(i,n) for(__typeof(n) i=0; i<(n); i++)
  29. #define FOR(i,a,b) for(__typeof(b) i=(a); i<=(b); i++)
  30. #define RFOR(i,a,b) for(__typeof(b) i=(a); i>(b); i--)
  31. #define RESET(t,value) memset((t), value, sizeof(t))
  32.  
  33. #define READ(f) freopen(f, "r", stdin)
  34. #define WRITE(f) freopen(f, "w", stdout)
  35.  
  36. #define PI acos(-1.0)
  37. #define INF (1<<30)
  38. #define eps 1e-8
  39. #define pb push_back
  40. #define ppb pop_back
  41. #define pii pair<int, int>
  42. #define G struct Graph
  43.  
  44. typedef long long int64;
  45. typedef unsigned long long ui64;
  46. typedef long double d64;
  47.  
  48. template< class T > T gcd(T a, T b) {
  49.     return (b != 0 ? gcd<T>(b, a%b) : a);
  50. }
  51. template< class T > T lcm(T a, T b) {
  52.     return (a / gcd<T>(a, b) * b);
  53. }
  54. template< class T > void setmax(T &a, T b) {
  55.     if(a < b) a = b;
  56. }
  57. template< class T > void setmin(T &a, T b) {
  58.     if(b < a) a = b;
  59. }
  60.  
  61. vector < int > pset (1000);
  62. void initSet(int _size) {
  63.     pset.resize(_size);
  64.     FOR(i,0,_size-1) pset[i] = i;
  65. }
  66. int findSet(int i) {
  67.     return (pset[i]== i)? i : (pset[i] = findSet(pset[i]));
  68. }
  69. void unionSet(int i,int j) {
  70.     pset[findSet(i)]=findSet(j);
  71. }
  72. bool isSameSet(int i,int j) {
  73.     return findSet(i)==findSet(j);
  74. }
  75.  
  76. #define Range 100
  77.  
  78. /* @Code starts */
  79. int dp[Range];
  80. int x[] = {-7, 10, 9, 2, 3, 8, 8, 1};
  81. void _reset() {
  82.     RESET(dp, -1);
  83. }
  84.  
  85. int LIS(int index) {
  86.     if(index == 0) return 1;
  87.     if (dp[index] != -1) {
  88.         return dp[index];
  89.     }
  90.     int ans = 1;
  91.     REP( j, index ) {
  92.         if (x[index] > x[j]) {
  93.             ans = max(ans, 1 + LIS(j));
  94.         }
  95.     }
  96.     return dp[index] = ans;
  97. }
  98.  
  99. int main() {
  100.     _reset();
  101.     int lis = -1;
  102.     REP(i, 7) {
  103.         int var = LIS(i);
  104.         if(var > lis) lis = var;
  105.     }
  106.  
  107.     cout << lis;
  108.     return EXIT_SUCCESS;
  109. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement