题目链接:力扣https://leetcode-cn.com/problems/russian-doll-envelopes/
题意:
给你一个二维整数数组 envelopes ,其中 envelopes[i] = [wi, hi] ,表示第 i 个信封的宽度和高度。
当另一个信封的宽度和高度都比这个信封大的时候,这个信封就可以放进另一个信封里,如同俄罗斯套娃一样。
请计算 最多能有多少个 信封能组成一组“俄罗斯套娃”信封(即可以把一个信封放到另一个信封里面)。
注意:不允许旋转信封。
方法: 动态规划,序列DP
class Solution {
public:
int maxEnvelopes(vector<vector<int>>& envelopes) {
sort(envelopes.begin(),envelopes.end());//将信封从小到大排序
int size = envelopes.size();
vector<int> dp(size,1);//动态规划向量,dp[i]表示以i结尾的序列的最大长度
int maxL = 1;
for(int i=1;i<size;i++)
{
for(int j=0;j<i;j++)
{
if(envelopes[j][0]<envelopes[i][0]&&envelopes[j][1]<envelopes[i][1])
{
dp[i] = max(dp[i],dp[j]+1);
}
}
maxL = max(dp[i],maxL);
}
return maxL;
}
};