9.3多阶段决策问题

本文探讨了多阶段决策问题,特别是在回溯法和动态规划中的应用。以单向TSP为例,展示了如何将多段图的最短路问题转化为动态规划求解,强调了解答树的层数对应于决策序号。同时,文章还讲解了0-1背包问题,并提供了相关代码,最终答案为d[1][C]。
摘要由CSDN通过智能技术生成

每做一次决策就可以得到解得一部分,当做完所有决策做完之后,完整的解就浮出水面了。在回溯法中,每次决策对应给一个结点产生新的子树,而解的生成过程对应一颗解答树,结点的层数就是“下个待填充位置”cur

9.3.1多段图的最短路

多段图是一种特殊的DAG,其结点可以划分成若干个阶段,每个阶段只有上一个阶段所决定

例题:单向TSP

分析:

在这个题目中,每一列就是一个阶段,每个阶段有三种决策

多阶段决策的最优化问题往往可以通过用动态规划解决,其中,状态及其转移类似于回溯法中的解答树,解答树的中的“层数”,也就是递归函数中的“当前填充位置cur”,描述的是即将完成的决策序号,在动态规划中被称为阶段

有了前面的经验,不难设计出状态,设d(i,j)为从格子(i,j)出发到最后一列的最小开销,但是本题不仅要输出解,还要求字典序最小,这就需要在计算d(i,j)的同时记录“下一列的行号”的最小值

int ans=INF,first=0;
for(int j=n-1;j>=0;j--){
    for(int i=0;i<m;i++){
        if(j==n-1)
            d[i][j]=a[i][j];  //边界
        else{
            int rows[3]={i,i-1,i+1};
            if(i==0) rows[1]=m-1;
            if(i==m-1) rows[2]=0;
            sort(rows,ro
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值