这个题大意很好理解,通过例子就能明白,很像俄罗斯套娃,大的娃娃套小的娃娃。这个题是大信封套小信封,每个信封都有长和宽,如果A信封的长和宽都要比B信封的要大,那么A信封可以套B信封,现在给定一组信封的大小,要求输出最多有几个信封能套在一起。
Example:
Given envelopes = [[5,4],[6,4],[6,7],[2,3]], the maximum number of envelopes you can Russian doll is 3 ([2,3] => [5,4] => [6,7]).
这个题细想其实很简单,首先要排序,按长从小到大排列,如果长一样,视宽小的为小排在前面。这样一来最优子结构和状态转移就都有了。
状态:dp[i]表示包含了第i的信封的ans,状态转移方程:如果第i个信封能套下它前面的第j个信封,则dp[i] = max{dp[j]+1},0<=j<i,否则dp[i] = 1只包含自身。
这个题的关键其实是前面排序那部分,我随便写了个冒泡O(n^2)的排序,还算运气好直接ac了。
 1 public int maxEnvelopes(int[][]envelopes) {
 2         int esize = envelopes.length;
 3         if(esize==0)return 0;
 4         if(esize==1)return 1;
 5         int ans = 1;
 6         int t1 = 0,t2 = 0;
 7         for(int i = esize-1;i>0;i--) {
 8             for(int j = 0;j<i;j++) {
 9                 if(envelopes[j][0]>envelopes[j+1][0]) {
10                     t1 = envelopes[j][0];
11                     envelopes[j][0] = envelopes[j+1][0];
12                     envelopes[j+1][0] = t1;
13                     t2 = envelopes[j][1];
14                     envelopes[j][1] = envelopes[j+1][1];
15                     envelopes[j+1][1] = t2;
16                 }else if((envelopes[j][0]==envelopes[j+1][0])&&(envelopes[j][1]>envelopes[j+1][1])) {
17                     t2 = envelopes[j][1];
18                     envelopes[j][1] = envelopes[j+1][1];
19                     envelopes[j+1][1] = t2;
20                 }
21             }
22         }
23         int[]dp = new int[esize];
24         Arrays.fill(dp,1);
25         for(int i = 1;i<esize;i++) {
26             for(int j = 0;j<i;j++)
27                 if(envelopes[j][0]<envelopes[i][0] && envelopes[j][1]<envelopes[i][1])dp[i] = Math.max(dp[i],dp[j]+1);
28             ans = Math.max(ans, dp[i]);
29         }
30         return ans;
31     }

转载于:https://www.cnblogs.com/messi2017/p/9943452.html

动态规划——Russian Doll Envelopes相关推荐

  1. leetcode(354)—— Russian Doll Envelopes(俄罗斯套娃信封)

    原题位置:Russian Doll Envelopes | LeetCode OJ 俄罗斯套娃信封问题的本质是一个二维版的 LIS(最长递增子列)的问题.为了更好地理解俄罗斯套娃信封问题的动态规划思路 ...

  2. Leetcode之Russian Doll Envelopes

    题目: You have a number of envelopes with widths and heights given as a pair of integers (w, h). One e ...

  3. LeetCode--354. Russian Doll Envelopes

    问题链接:https://leetcode.com/problems/russian-doll-envelopes/ 俄罗斯套娃问题,因垂丝汀!!!,要求俄罗斯套娃能够达到的最多嵌套的层数.先要理解对 ...

  4. leetcode 354. Russian Doll Envelopes

    题目链接:https://leetcode.com/problems/russian-doll-envelopes/   俄罗斯套娃o(╯□╰)o 方法一 递归 思想:先对套娃从大到小进行排序,然后依 ...

  5. leetcode算法题--Russian Doll Envelopes

    原题链接:https://leetcode.com/problems/russian-doll-envelopes/ class Solution {public:struct node {int x ...

  6. 354. Russian Doll Envelopes刷题笔记

    题解链接,用dp做 class Solution:def maxEnvelopes(self, envelopes: List[List[int]]) -> int:envelopes.sort ...

  7. 算法 64式 8、动态规划算法整理_第1部分_1到15题

    1 算法思想 动态规划 1.1含义 把问题分解成多阶段或多个子问题,顺序求解各个子问题,最后一个子问题就是初始问题的解. 概念 阶段: 问题分成的顺序的几个环节.例如最长递增子序列中每个字符就是一个阶 ...

  8. 算法 64式 8、动态规划算法整理

    1 算法思想 动态规划 1.1含义 把问题分解成多阶段或多个子问题,顺序求解各个子问题,最后一个子问题就是初始问题的解. 概念 阶段: 问题分成的顺序的几个环节.例如最长递增子序列中每个字符就是一个阶 ...

  9. LEETCODE-刷题个人笔记 Python(1-400)-TAG标签版本

    1. Array (1) 27. Remove Element(Easy) 给定数组nums和值val,在适当位置删除该值的所有实例并返回新长度. 思路: 不需要使用排序,如果等于该值,则将n-1的值 ...

  10. 【2021.3】 LeetCode每日一题复盘

    March 1st - March 7th Average of Levels in Binary Tree 题目大意: 有一棵二叉树,返回二叉树每一层节点值的平均值的列表. 思路: 很自然的想到了二 ...

最新文章

  1. 13. 微型计算机中,传送cpu发出的读/写指令的总线是,我的微机原理题库
  2. centos 升级cmake from 2.* to 3.*
  3. 八十二、归并排序求取复杂的逆序数
  4. CodeForces - 1110G Tree-Tac-Toe(博弈+构造)
  5. 在微服务框架Demo.MicroServer中添加SkyWalking+SkyApm-dotnet分布式链路追踪系统
  6. Pytorch中的 torch.Tensor() 和 torch.tensor() 的区别
  7. 排序算法三:堆排序基本原理以及Python实现
  8. Linux系统检查查看桌面环境
  9. 机器学习算法总结--线性回归和逻辑回归
  10. c语言形式参数若为b 4,2016年计算机二级c语言题库
  11. Kafka是如何处理Netflix每天2万亿条消息的?
  12. .Net Framework名词定义
  13. 【读书笔记】Java基础学习之目录
  14. Python中expected an indented block
  15. 《变革中的思索》各路读者评论
  16. android Xmpp+openfire 消息推送 :SASL authentication failed using mechanism DIGEST-MD5
  17. Hadoop开发环境搭建之Eclipse配置
  18. 计算机应用专业毕业设计模板,计算机应用毕业论文模板范文
  19. QQ连连看外挂源代码
  20. 幻方加密代码——自动生成幻方密钥方法,罗伯法单偶数阶的解法代码基于python

热门文章

  1. 《Effective Java 3rd》读书笔记——泛型
  2. 媒体化战略:数字时代企业如何做好公关与内容营销
  3. 带你动手编程的强化学习著作,每行代码都是它的温柔!
  4. 需求变更,产品经理的良心也会痛!
  5. 温昱谈程序员向架构师转型的规律
  6. 名企面试官精讲典型编程题之C++篇
  7. 中国移动创新系列丛书《OPhone应用开发权威指南》读者交流活动
  8. 我看《网络营销实战密码:策略 技巧 案例》这本书
  9. 76----平面二次曲线的分类、消去二次交叉项、转轴变换、平面二次曲线的不变量、利用不变量确定平面二次曲线的类型和形状
  10. Unicode与UTF8:字符集与字符编码的关系