洛谷.P1713 麦当劳叔叔的难题

该博客主要介绍了如何利用插头动态规划(DP)解决洛谷P1713问题。博主详细阐述了状态转移的思考过程,包括上下镜像对称、起点插头建立、状态转移规则(括号匹配法)以及处理障碍物的情况。同时,博主提到了优化技巧,如滚动数组、使用栈避免遍历状态过多,以及采用44进制进行快速运算。文章最后提供了代码实现。
摘要由CSDN通过智能技术生成

这道题正解是插头DP。

既然是用DP就要考虑状态转移:

  • 首先,由于插头DP是从 (1,1)(1,1) 到 (n,n)(n,n),而题目要求从 (1,n)(1,n) 到 (n,1)(n,1),所以要将地图上下镜像对称一下,以便使用插头DP。

  • 接着,因为题目要我们找出一条从起点到终点的路径,所以我们想到在起点建一个插头,若DP到终点时也有且只有一个相同的插头指向终点,则状态为合法。

  • 然后考虑状态转移,这里使用 “括号匹配法” :

    设 upup 为当前格子的上方的括号, leftleft 为当前格子左边的括号,用 11 表示左括号, 22 表示右括号。(如图下) 

    黑色的是轮廓线,绿色的是当前格子。

  1. 若 upup 和 leftleft 都为 00 (没插头),那么这个格子可以走,也可以不走,若走则在下方和右方新建一个插头(在代码中则是加入一对匹配括号),并将此状态路过格数加一,不走则不做改动。(如图下)

这是走的。

这是不走。

  1. 若只有一个方向有插头,由于是一条路,所以这个插头必须接,但出口有两个方向,一个向下,一个向右,对于每种情况都要在相对位置建插头,插头(括号)类型与 up/leftup/left 插头类型一样。(图只给了从上方来的,从左边来的同理)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值