排序 + 动态规划
class Solution {
public:static bool cmp(const vector<int>& a, const vector<int>& b) {
if (a[0] == b[0]) return a[1] > b[1];return a[0] < b[0];}int maxEnvelopes(vector<vector<int>>& envelopes) {
sort(envelopes.begin(), envelopes.end(), cmp);int size = envelopes.size();int dp[size + 1];for (int i = 0; i <= size; i ++) dp[i] = 1;int res = 0;for (int i = 0; i < envelopes.size(); i ++) {
for (int j = 0; j < i; j ++) {
if (envelopes[i][1] > envelopes[j][1]) dp[i] = max(dp[i], dp[j] + 1);}res = max(res, dp[i]);}return res;}
};