排序后就类似于最长上升子序列问题。
354. 俄罗斯套娃信封问题
class Solution {
public:
struct node{
int w,h;
}mem[10005];
static bool cmp(node x,node y){
if (x.w<y.w) return true;
if (x.w==y.w){
if (x.h<y.h) return true;
else return false;
}
return false;
}
int maxEnvelopes(vector<vector<int>>& envelopes) {
int n=envelopes.size();
for (int i=0;i<n;i++){
mem[i].w=envelopes[i][0];
mem[i].h=envelopes[i][1];
}
int f[n+5];
for (int i=0;i<n;i++){
f[i]=1;
}
int ans=1;
if (n==0) return 0;
sort(mem,mem+n,cmp);
for (int i=0;i<n;i++){
for (int j=0;j<i;j++){
if (mem[i].w>mem[j].w && mem[i].h>mem[j].h){
f[i]=max(f[i],f[j]+1);
ans=max(f[i],ans);
}
}
}
return ans;
}
};