fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. using namespace std;
  5.  
  6. void print_all(
  7. const vector<int> seq
  8. , const vector<int>& len
  9. , int max, int pos
  10. , vector<int>& sofar) {
  11. if (max == 0) {
  12. for (int i = sofar.size()-1 ; i >= 0 ; i--)
  13. cout << sofar[i] << " ";
  14. cout << endl;
  15. return;
  16. }
  17. int val = pos < seq.size() ? seq[pos] : -1;
  18. for (int i = pos-1 ; i >= 0 ; i--) {
  19. if (len[i] == max && seq[i] > val) {
  20. sofar.push_back(seq[i]);
  21. print_all(seq, len, max-1, i, sofar);
  22. sofar.erase(sofar.end()-1);
  23. }
  24. }
  25. }
  26.  
  27. int main() {
  28. int data[] = {5, 23, 100, 10, 4, 90, 65, 11, 18, 10};
  29. int sz=sizeof(data)/sizeof(data[0]);
  30. vector<int> seq(data, data+sz);
  31. vector<int> len(seq.size());
  32. for (int i = 0 ; i < seq.size() ; i++) {
  33. len[i] = 1;
  34. for (int j = i-1 ; j >= 0 ; j--)
  35. if (seq[j] > seq[i] && len[j]+1 > len[i])
  36. len[i] = len[j]+1;
  37. }
  38. int max = *max_element(len.begin(), len.end());
  39. cerr << max << endl;
  40. vector<int> sofar;
  41. print_all(seq, len, max, seq.size(), sofar);
  42. }
Success #stdin #stdout 0.02s 2860KB
stdin
 
stdout
100 90 65 18 10 
100 90 65 11 10