小Tips:曼哈顿距离

场景引入:

曼哈顿距离也叫出租车距离。

试想你是一个大学生,你想坐出租车到某一个地方去玩,司机对你去的地方还不熟悉,然后你很自信地跟司机说从这点坐标到目的地直线距离为123.5km,司机:“你2B吧”,对于司机而言你应该告诉他应该向东或向西走多远,什么时候拐弯,然后再走多远。

曼哈顿距离也是这样子,即两点在南北方向上的距离加上在东西方向上的距离:

如图红线代表曼哈顿距离,绿线代表几何距离

公式:

c=\left | x_i-x_j \right |+\left |y_i-y_j \right |

应用:

在ACwing上有这样一道题:

设有 N×N 的方格图,我们在其中的某些方格中填入正整数,而其它的方格中则放入数字0。如下图所示:

2.gif

某人从图中的左上角 A 出发,可以向下行走,也可以向右行走,直到到达右下角的 B 点。

在走过的路上,他可以取走方格中的数(取走后的方格中将变为数字0)。

此人从 A 点到 B 点共走了两次,试找出两条这样的路径,使得取得的数字和为最大。

                                                                                        -----取自ACwing---1027. 方格取数

这是一道线性DP的问题,但在解答这个问题的时候我们会遇到一个问题,我们怎么描述这两条路径的状态?

通过观察我们发现应为他们只能向右向下走,故两次路线的曼哈顿距离在每一个时刻处处相等,即

设初始坐标为(1,1),则:\left | x_1-1 \right |+\left | y_1-1 \right |=\left | x_2-1 \right |+\left | y_2-1 \right |

所以x_1+y_1=x_2+y_2

所以我们DP可以建立起这样的状态:f[k,i1,i2](k=i1+j1=i2+j2);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值