bzoj1207[HNOI2004]打鼹鼠

bzoj1207[HNOI2004]打鼹鼠

题意:

在一个n*n的网格 中,如果i时刻鼹鼠在某个网格中出现,而机器人也处于同一网格的话,那么这 个鼹鼠就会被机器人打死。而机器人每一时刻只能够移动一格或停留在原地不动。机器人的移动是指从当前所处的网格移向相邻的网格,且不能走出整个n*n的网格。游戏开始时,你可以自由选定机器人的初始位置。已知一段时间内,鼹鼠出现的时间和地点,求机器人在这一段时间内最多打死多少鼹鼠。

题解:

一道类似求最长公共子串的题,枚举打一只地鼠前是打完哪只地鼠后到达的,因为数据弱使用不用加奇怪优化。

代码:

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 #define inc(i,j,k) for(int i=j;i<=k;i++)
 5 using namespace std;
 6 int f[20000],t[20000],x[20000],y[20000];
 7 int main(){
 8     int n,m; scanf("%d%d",&n,&m); int ans=0;
 9     inc(i,1,m){
10         scanf("%d%d%d",&t[i],&x[i],&y[i]); int mx=0;
11         inc(j,1,i-1)if(t[i]-t[j]>=abs(x[i]-x[j])+abs(y[i]-y[j]))mx=max(mx,f[j]);
12         f[i]=mx+1; ans=max(ans,f[i]);
13     }
14     printf("%d",ans);
15     return 0;
16 }

20160324

原文地址:https://www.cnblogs.com/YuanZiming/p/5656823.html