// Advanced Algorithms - Chapter 14. #include #include #include #include int longest_increasing_subsequence(const std::vector &s) { if(s.empty()) return 0; std::vector memo(s.size(), 1); for(auto i = 0; i < s.size(); i++) for(auto j = 0; j < i; j++) if(s[i] >= s[j]) memo[i] = std::max(1+memo[j], memo[i]); return *std::max_element(memo.begin(), memo.end()); } // longest_increasing_subsequence() int main() { int n, x; std::vector v; scanf("%d\n", &n); for(auto i = 0; i < n; i++) { scanf("%d", &x); v.push_back(x); } printf("%d\n", longest_increasing_subsequence(v)); return 0; } // main()