动态规划:将大问题转化为小问题,每次求解小问题的最优解,再从最优解中挑选出最符合的

#include <algorithm>
#include <iostream>
#include <vector>

int main(int argc, char *argv[]) {
  
  int count, length = 0;
  
  std::cin >> count;
  
  std::vector<int> arr(count);
  std::vector<int> dp(count, 1);
  
  for (int i = 0; i < count; i++) {
    std::cin >> arr[i];
  }
  
  for (int i = 0; i < count; ++i) {  // 从小序列到大序列
    for (int j = 0; j < i; ++j) {
      if (arr[i] > arr[j]) {
        dp[i] = std::max(dp[i], dp[j] + 1);  // 子问题的最优解
      }
    }
    length = std::max(length, dp[i]);
  }
  
  std::cout << length << std::endl;
  
  return 0;
}