ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 169|回复: 5

[分享] 逆向动态规划(DP):小蚂蚁遗迹探秘

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-10-14 21:48 | 显示全部楼层 |阅读模式
图片.png

图片.png


小蚂蚁遗迹探秘20241012-超人.rar

1.64 MB, 下载次数: 6

评分

3

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-10-14 21:54 | 显示全部楼层
这个问题无法用之前说过的基础最小路径和动态规划方法解决。如果定义dp[j]代表从起点活着通过(i,j)需要的最少体力值,只看下面两行数据的话最优解是初始带2点体力值:
图片.png

但是,如果加上一行:
图片.png
最优解并非从第二行最右下角的0过来,因为这样初始需要5个体力值,而下面路径只需要3个初始体力值:
图片.png
也就是说,如果按之前的方法,最右下角的最优解应该取左侧和上方的最小值,但是取到的最小值却不是到当前位置的最优解。



TA的精华主题

TA的得分主题

 楼主| 发表于 2024-10-14 21:56 | 显示全部楼层
本帖最后由 shaowu459 于 2024-10-14 22:00 编辑

这种情况下,可以逆向,从最右下角开始考虑。设走出最右下角后最小值体力剩1,然后往回走,向左和向上,直到走的左上角。
设置dp[j]代表:保证从(i,j)出发能活着到达宝藏时,到达(i,j)时需要的最少体力值。dp[0][0]是最终要求解问题,dp[10-1][10-1]是最简单问题。
图片.jpg

举例说明:
1)最右下角是-18,那么要保证出去后剩1个体力值,所以到达右下角的时候体力值最少应该是19(1减去-18)。也就原来减少体力的往回加,原来加体力的减掉。
2)最后一行再往左走,单元格值是7,如果从这里到右侧的18需要最小19个体力值,所以到7这个单元格时最小体力值可以是12(19-7)。
3)从最右下角的-18往上走,单元格值是-19,为了保证到右下角能有19个体力值,所以到达-19这个单元格的最小体力值要是38(19减去-19)。
4)以此类推,但是如果通过计算得到的数字是负数,则要保留1,保证最少带着一个体力值过来。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-10-14 22:04 | 显示全部楼层
公示实现就比较简单了,和之前的二维转一维用法一致,只不过从最后一个元素往前遍历:
=@REDUCE(
    1,       在宝藏处最小体力值1
    ROW(1:100),   循环100次
    LAMBDA(x, y,
        LET(
            s, INDEX(x, 10),   提取x里第10个元素,也就是当前值的上方元素
            VSTACK(
                MAX(
                    1,   和1取最大值,保证至少带着一个体力值过来,也就是得活着过来
                    IFS(
                        y < 11,   如果在第一行
                        @x,    取x第一个元素,也即当前值左侧
                        MOD(y, 10) = 1,   如果是第一列
                        s,   保留x第10个元素,业绩当前值上方元素
                        1,  其他情况
                        MIN(s, @x)    取两者较小者
                    ) - INDEX(TOCOL(A2#), 101 - y)  减去从最后一个往前逐个取的值
                ),
                x
            )
        )
    )
)



评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-10-15 11:37 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-10-15 12:31 来自手机 | 显示全部楼层
捡回一个小僵尸 发表于 2024-10-15 11:37
超人老师还可以附上B站的视频呀

这个比双路dp那个简单的多,就不附了
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-23 02:57 , Processed in 0.048679 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表