class Solution {
public:
static bool compare(vector<int> a,vector<int> b){
if(a[0]<b[0]) return true;
else if(a[0]>b[0]) return false;
else{
if(a[1]<b[1]) return true;
else return false;
}
}
int maxEnvelopes(vector<vector<int>>& envelopes) {
int n = envelopes.size();
if(n==0) return 0;
sort(envelopes.begin(),envelopes.end(),compare);
int dp[n];
for(int i=0;i<n;i++) dp[i]=1;
for(int i=1;i<n;i++){
for(int j=0;j<i;j++){
if(envelopes[i][0]>envelopes[j][0]&&envelopes[i][1]>envelopes[j][1]) dp[i] = dp[i]>(dp[j]+1)?dp[i]:(dp[j]+1);
else if(envelopes[i][0]==envelopes[j][0]){
dp[i] = dp[i]>dp[j]?dp[i]:dp[j];
break;
}
}
}
int max = 0;
for(int i=0;i<n;i++) max = max>dp[i]?max:dp[i];
return max;
}
};
动态规划。