思路

首先排序,后面一定不会存在比当前信封更大的信封。
对于严格大于,是具有传递性的,如果信封a比信封b大,则a比(所有b大于的信封)大,因此可以利用传递性进行动态规划。

dp代表该信封能装下的最大数量的信封,初始值为1,即自身,可得转移方程
dp[i] = max(dp[i], dp[j]+1) j∈(0,i);
最后dp中的最大值即是答案。
通过两次遍历暴力DP即可。

class Solution {public:int maxEnvelopes(vector<vector<int>>& envelopes) {int n = envelopes.size();vector<int> dp(n, 1);int ans = 1;sort(envelopes.begin(), envelopes.end());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] = max(dp[i], dp[j] + 1);}}}for(auto x : dp) {ans = max(ans, x);}return ans;}
};

另外可以参考力扣1996——游戏中弱角色的数量(排序)进行排序上的优化,按长度升序,长度相等的宽度降序,就只需要比较于前者的宽即可,可以避免一部分比较

class Solution {public:int maxEnvelopes(vector<vector<int>>& envelopes) {int n = envelopes.size();vector<int> dp(n, 1);int ans = 1;sort(envelopes.begin(), envelopes.end(), [](const auto& a, const auto& b) {return a[0] == b[0] ? a[1] > b[1] : a[0] < b[0];});for(int i = 1; i < n; i++) {for(int j = 0; j < i; j++) {if(envelopes[i][1] > envelopes[j][1]) {dp[i] = max(dp[i], dp[j] + 1);}}}for(auto x : dp) {ans = max(ans, x);}return ans;}
};

力扣354——俄罗斯套娃信封问题(排序+动态规划)相关推荐

  1. 354. 俄罗斯套娃信封问题(动态规划)

    354. 俄罗斯套娃信封问题 问题描述 给你一个二维整数数组 envelopes ,其中 envelopes[i] = [wi, hi] ,表示第 i 个信封的宽度和高度. 当另一个信封的宽度和高度都 ...

  2. LeetCode - 354 俄罗斯套娃信封问题

    题目来源 354. 俄罗斯套娃信封问题 - 力扣(LeetCode) 题目描述 给你一个二维整数数组 envelopes ,其中 envelopes[i] = [wi, hi] ,表示第 i 个信封的 ...

  3. 354. 俄罗斯套娃信封问题

    354. 俄罗斯套娃信封问题 题目 一.思路 二.代码 总结 题目 给你一个二维整数数组 envelopes ,其中 envelopes[i] = [wi, hi] ,表示第 i 个信封的宽度和高度. ...

  4. leetcode 354. 俄罗斯套娃信封问题(二维排序有关)

    题目描述 给定一些标记了宽度和高度的信封,宽度和高度以整数对形式 (w, h) 出现.当另一个信封的宽度和高度都比这个信封大的时候,这个信封就可以放进另一个信封里,如同俄罗斯套娃一样. 请计算最多能有 ...

  5. 【动态规划-困难】354. 俄罗斯套娃信封问题

    [题目] 给你一个二维整数数组 envelopes ,其中 envelopes[i] = [wi, hi] ,表示第 i 个信封的宽度和高度. 当另一个信封的宽度和高度都比这个信封大的时候,这个信封就 ...

  6. LeetCode 354. 俄罗斯套娃信封问题(最长上升子序 DP/二分查找)

    1. 题目 给定一些标记了宽度和高度的信封,宽度和高度以整数对形式 (w, h) 出现. 当另一个信封的宽度和高度都比这个信封大的时候,这个信封就可以放进另一个信封里,如同俄罗斯套娃一样. 请计算最多 ...

  7. 力扣解法汇总969-煎饼排序

    原题链接:力扣 描述: 给你一个整数数组 arr ,请使用 煎饼翻转 完成对数组的排序. 一次煎饼翻转的执行过程如下: 选择一个整数 k ,1 <= k <= arr.length 反转子 ...

  8. LeetCode 第 58 场力扣夜喵双周赛(动态规划、马拉车算法,前后缀处理)/ 第 253 场力扣周赛(贪心,LIS)

    第 58 场力扣夜喵双周赛 两道600多 5193. 删除字符使字符串变好 题目描述 一个字符串如果没有 三个连续 相同字符,那么它就是一个 好字符串 . 给你一个字符串 s ,请你从 s 删除 最少 ...

  9. 354. 俄罗斯套娃信封问题(良心注释)

    问题描述 给你一个二维整数数组 envelopes ,其中 envelopes[i] = [wi, hi] ,表示第 i 个信封的宽度和高度. 当另一个信封的宽度和高度都比这个信封大的时候,这个信封就 ...

最新文章

  1. Windows10+anaconda,python3.5, 安装glove-python
  2. 购买《四级网络工程师预测试卷与考点解析》,哪里最便宜?
  3. 用c语言编写一个2048 游戏,求c语言编写的2048游戏代码,尽量功能完善一些
  4. win10远程桌面连接凭据怎么设置_想在家办公,只需打开win10远程桌面连接就可以了,还犹豫什么...
  5. 【Flink】Flink连接prometheus报错 IOException :Response code formxxx/metrics/job/rule
  6. 修改mongodb最大查询数_mongodb数据库如何查询某个字段的最大值?
  7. Web前端-HTML基础
  8. Matlab除法结果取整
  9. docker视频教程 假装听听 应该还行
  10. 记录一下,不是所有的韩语输入法apk,装到同一个系统,都能弹出软键盘
  11. 怎么用java打开pkg文件怎么打开_pkg文件怎么打开,小编教你怎么打开pkg文件
  12. 基础数学4:导数、偏导数、方向导数、梯度、全微分回顾
  13. HTML 常用选择框
  14. 关于中文分词的一元分词讨论
  15. CoinBene 满币荣获「2020 年度最佳品牌增长」大奖 未来可期
  16. 【GNN报告】复旦大学许嘉蓉:基于图数据的鲁棒机器学习
  17. 计算机各部分名称ppt,PowerPoint软件界面各部分名称(PPT2010/2013/2016)
  18. WPF窗体禁用Alt + F4键关闭窗体
  19. 吉利汽车资深总工程师刘卫国:智能驾驶汽车核心技术之控制器
  20. 怎样在手机中将PPT转换成PDF

热门文章

  1. GNSS说第(七)讲---自适应动态导航定位(九)---自适应因子模型
  2. java-校园兼职系统
  3. RevitAPI 之参照平面(Referenceplane)和参照线(Reference Line)
  4. 地球固体潮汐和海洋潮汐改正
  5. 公司名称备份,我自己做个记录
  6. 利用php在图片上写字(中英文)
  7. python调用excel的书_Python读写Excel表格
  8. 2022年CPA战略和风险管理【3月22日,刷题结束】
  9. 解决response乱码问题
  10. 事无巨细,时钟芯片DS1302