思路:排序+最长递增子序列
w升序排列,若w相同,h降序排列
class Solution {
public:
int maxEnvelopes(vector<vector<int>>& envelopes) {
if(envelopes.size()==0) return 0;
sort(envelopes.begin(),envelopes.end(),[](const vector<int>& a,const vector<int>&b){
return a[0]<b[0]||(a[0]==b[0]&&a[1]>b[1]);
});//w升序排列,w相同,h降序排列
int *dp=new int[envelopes.size()];
for(int i=0;i<envelopes.size();i++)
dp[i]=1;
int res=1;
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]);
}
delete[] dp;
return res;
}
};