场景引入:
曼哈顿距离也叫出租车距离。
试想你是一个大学生,你想坐出租车到某一个地方去玩,司机对你去的地方还不熟悉,然后你很自信地跟司机说从这点坐标到目的地直线距离为123.5km,司机:“你2B吧”,对于司机而言你应该告诉他应该向东或向西走多远,什么时候拐弯,然后再走多远。
曼哈顿距离也是这样子,即两点在南北方向上的距离加上在东西方向上的距离:
如图红线代表曼哈顿距离,绿线代表几何距离
公式:
应用:
在ACwing上有这样一道题:
设有 N×N 的方格图,我们在其中的某些方格中填入正整数,而其它的方格中则放入数字0。如下图所示:
某人从图中的左上角 A 出发,可以向下行走,也可以向右行走,直到到达右下角的 B 点。
在走过的路上,他可以取走方格中的数(取走后的方格中将变为数字0)。
此人从 A 点到 B 点共走了两次,试找出两条这样的路径,使得取得的数字和为最大。
-----取自ACwing---1027. 方格取数
这是一道线性DP的问题,但在解答这个问题的时候我们会遇到一个问题,我们怎么描述这两条路径的状态?
通过观察我们发现应为他们只能向右向下走,故两次路线的曼哈顿距离在每一个时刻处处相等,即
设初始坐标为(1,1),则:
所以
所以我们DP可以建立起这样的状态:f[k,i1,i2](k=i1+j1=i2+j2);