动态规划入门==》转换为DAG问题——最短路径|矩阵嵌套|硬币问题

本文介绍了动态规划的共性,将其转化为带权有向无环图(DAG)问题,以解决最短路径、信封嵌套和硬币问题。通过拓扑排序和动态规划状态转移矩阵,分别求解三种问题的最优解,揭示了动态规划在这些问题中的应用和转换思路。
摘要由CSDN通过智能技术生成

动态规划刚刚开始学习,到现在做过几道题,借鉴了各位大神的书籍文章后,对其有了新的看法。

现在我总结目前我遇到题目动态规划思想的共性——很多动态规划都可以转化为带权DAG问题,以下是几道题题,我从中总结了他们的DAG特性

一、DAG最短路径

在我们聊DAG时先来介绍一个最直接的DAG问题

问题描述:

给一个带权有向无环图G=(V,E),找出这个图里S==>E的最短路径。


这个问题用贪心算法的话不能得到全局最优解

我们用动态规划思想,考虑DAG问题

1.首先在数据结构上我们可以用二维数组的形式表示这个DAG,为了方便,用Q(S,N)表示S到N的最短路径


2.问题小化,直接求Q(S,E)求不出来,因为S到E没有联通,但是Q(D,E)=1,Q(B,E)=2易求,那我们只要知道Q(S,D)和Q(S,B)然后Q(S,E)=min{ Q(S,D)+1,Q(S,B)+2},Q(S,D)和Q(S,B)我们同理也可以通过求Q(S,A)Q(S,C)得出。以此类推。

3.数据结构表示,我们用dp['N'-'A']  来存储Q(S,N)

4.伪代码实现

4.1正常预处理,把点都用拓扑排序排好,dp全初始化为0,这里设R(T,M)为T到N的路径消耗

solve(){

拓扑排序(全部点),dp全初始化为0

for(M : 全部点)

    for(舍T= A~M即M之前的点){

         if(T可以连向M)dp[M-‘A’]=min(dp[T]+R(T,M),dp[M-'A']);

    }

    return dp['E'-'A']

}

4.2递归处理方法

Q(T,M){

    if(R(T,M)可以连接z)

        returnR(T,M)

    不能连接则 查表找出指入M的所有点集合Ms

        return Min(Q(T,Ms)+R(Ms,M))//返回所有点集合中(最短路径+当前消耗)最短的

}


二、信封嵌套问题(嵌套矩形问题)

当然别的某些动态规划解法问题也可以想象成DAG

这里跟我之前一篇关于动态规划的博客的问题是一样的,但是思想的角度不一样。

问题描述:

n个矩形,每个矩形可以用两个整数ab描述,表示它的长和宽。 矩形X(a,b)可以嵌套在矩形Y(c, d)中,当且仅当a

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值