动态规划 和 图遍历的结合应用

动态规划与图遍历在解决某些特定问题时能提高效率,例如寻找矩形的最大嵌套数。通过读取长宽数组,构建01矩阵表示有向图,将问题转化为求图的最长路径。使用DFS或DP方法,其中DFS从每个row出发,找到可嵌套的矩形并递归搜索,更新路径长度;DP则通过递推公式求解,避免重复计算。
摘要由CSDN通过智能技术生成

遍历图通常用到的方式为dfs, bfs, 或者拓扑排序。 但是对于某些特定的情况,用动态规划去遍历图是非常有效率的,避免了重复计算已经计算过的vertex。

一个很好的例子: 有n个长宽[a, b] 不同的矩形, 如果一个矩形的长宽小于另一个矩形的长宽或者宽长,则这个矩形可以被大的那个嵌套, 则最多嵌套多少个矩形在一起。


这个题目可以用动态规划和深搜去做,dfs的效率要低得多。 思路就是读入一个包含a ,b的二维数组,遍历整个数组,如果有一个矩形可以嵌套另一个,则在另一个二维数组里的相应位置记上1, 即 if(a > A && b > B || a > b && b > A) arc[i[a]][j[a]] = 1; 如此建立一个只包含 01 的数组, 可以看出 这个数组这个有向图。 则问题转化为图的最长路径问题。


图的最长路径解: dfs: 以每一个row 为点 找出可以嵌套的矩形, 找到就向下继续找那个矩形可以嵌套哪些其他的矩形, 直至无法嵌套,更新路径长度在每一个vertical 上, 最后找到数组里最大值, 输出即可


比如说: 1 到 【2,3,5】, 5 到 【2, 3  ,6】 , 1是起点, 更新为1个矩形, 当深搜到 2 3 5三条路时 每一条路都更新递增一个1, 就是 【2,3,5】 都为2, 然后起点为5, 下层为 【2, 3, 6】 则 【2, 3 , 6】 都为 3,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值