bzoj1207【HNOI2004】打鼹鼠
1207: [HNOI2004]打鼹鼠
Time Limit:10 SecMemory Limit:162 MB
Submit:2309Solved:1135
[Submit][Status][Discuss]
Description
鼹鼠是一種很喜歡挖洞的動物,但每過一定的時間,它還是喜歡把頭探出到地面上來透透氣的。根據這個特點阿Q編寫了一個打鼹鼠的游戲:在一個n*n的網格中,在某些時刻鼹鼠會在某一個網格探出頭來透透氣。你可以控制一個機器人來打鼹鼠,如果i時刻鼹鼠在某個網格中出現,而機器人也處於同一網格的話,那麼這個鼹鼠就會被機器人打死。而機器人每一時刻只能夠移動一格或停留在原地不動。機器人的移動是指從當前所處的網格移向相鄰的網格,即從坐標為(i,j)的網格移向(i-1, j),(i+1, j),(i,j-1),(i,j+1)四個網格,機器人不能走出整個n*n的網格。游戲開始時,你可以自由選定機器人的初始位置。現在你知道在一段時間內,鼹鼠出現的時間和地點,希望你編寫一個程序使機器人在這一段時間內打死盡可能多的鼹鼠。
Input
第一行為n(n<=1000), m(m<=10000),其中m表示在這一段時間內出現的鼹鼠的個數,接下來的m行每行有三個數據time,x,y表示有一只鼹鼠在游戲開始後time個時刻,在第x行第y個網格裡出現了一只鼹鼠。Time按遞增的順序給出。注意同一時刻可能出現多只鼹鼠,但同一時刻同一地點只可能出現一只鼹鼠。
Output
僅包含一個正整數,表示被打死鼹鼠的最大數目
Sample Input
2 2
1 1 1
2 2 2
Sample Output
1
HINT
Source
最長上升序列
#include
#include
#include
#include
#include
#include
#define F(i,j,n) for(int i=j;i<=n;i++)
#define D(i,j,n) for(int i=j;i>=n;i--)
#define ll long long
#define maxn 10005
using namespace std;
int n,m,ans;
int f[maxn],t[maxn],x[maxn],y[maxn];
inline int read()
{
int x=0,f=1;char ch=getchar();
while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
while (ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
int main()
{
n=read();m=read();
F(i,1,m) f[i]=1;
F(i,1,m)
{
t[i]=read();x[i]=read();y[i]=read();
F(j,1,i-1) if (abs(x[i]-x[j])+abs(y[i]-y[j])<=t[i]-t[j])
f[i]=max(f[i],f[j]+1);
}
ans=0;
F(i,1,m) ans=max(ans,f[i]);
printf("%d\n",ans);
}