LA 4851 Restaurant
题目大意:
有M*M网格,左下角(0,0),右上角(M-1,M-1).上面有n个餐厅,其中编号为1和2的分别是AB两宾馆的餐厅.对于一个位置,若存在与之前已有的任意餐厅位置相比,更靠近A或者B,就定义为”好位置”.问”好位置”的个数.(其中,两点间的距离为曼哈顿距离,即横纵坐标差的绝对值之和)
题目分析:
因为AB同纵坐标Y,所以尝试从xa移动到xb.
则设d数组,d[i]表示x=i时,纵坐标能到达的最大值.
那么对于每有一个点(x,y),则有d[x]=min(d[x],abs(Y-y)).
再从左至右,从右至左来递推一遍,d[x]=min(d[x],d[x±1]+1).
代码:
#include<cmath>
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxm=60