看到题目后脑洞大开,信封一层套一层这不就是有向图吗,那这道题不就是求有向图最长路径吗,然后看了半天拓补排序和排序过后动态规划求最长路径。
然而答案一个sort函数加动态规划就解决了,嘛,原理还是一样的
class Solution {
public:
int maxEnvelopes(vector<pair<int, int>>& envelopes) {
int res = 0, n = envelopes.size();
vector<int> dp(n, 1);
sort(envelopes.begin(), envelopes.end());
for (int i = 0; i < n; ++i) {
for (int j = 0; j < i; ++j) {
if (envelopes[i].first > envelopes[j].first && envelopes[i].second > envelopes[j].second) {
dp[i] = max(dp[i], dp[j] + 1);
}
}
res = max(res, dp[i]);
}
return res;
}
};