class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param letters intvector<vector<>>
* @return int
*/
/*
将问题降维为最长递增子序列问题。
*/
static bool cmp(vector<int>A, vector<int>B) {
if (A[0] == B[0]) {
return A[1] > B[1];
}
return A[0] < B[0];
}
int maxLetters(vector<vector<int> >& letters) {
// write code here
// 做输入判断
// 按照长度递增排序,宽度按递减排序
// dp(i)表示i可以嵌套多少信封,所以j应该是<i
int len = letters.size();
if (len == 0 || len == 1) {
return len;
}
sort(letters.begin(), letters.end(), cmp);
vector<int>dp(letters.size(), 1);
int cnt = 1;
for (int i = 0; i < letters.size(); i++) {
for (int j = 0; j < i; j++) {
if(letters[i][1] > letters[j][1]) {
dp[i] = max(dp[i], dp[j] + 1);
cnt = max(cnt, dp[i]);
}
}
}
return cnt;
}
};