bzoj 1207
n 似乎没有任何用。
先把鼹鼠按照出现顺序排序,然后如果打完第 i 只鼹鼠还能去打第 j 只鼹鼠必须第 j 只鼹鼠出现的时间 - 第 i 只鼹鼠出现的时间 <= 两只鼹鼠的哈曼顿距离。
#include"cstdio" #include"cctype" #include"cmath" #include"algorithm" using namespace std; int read() { int c,x=0; while(!isdigit(c=getchar())); while(x=x*10+c-'0',isdigit(c=getchar())); return x; } struct mouse { int t,x,y; mouse(){} mouse(int y,int x,int t):t(t),x(x),y(y){} }mice[10000]; int f[10000]; bool comp(mouse a,mouse b) { return a.t<b.t; } bool check(mouse a,mouse b) { return abs(a.x-b.x)+abs(a.y-b.y)<=a.t-b.t; } int main() { read(); int m=read(),ans=0; for(int i=0;i<m;i++) mice[i]=mouse(read(),read(),read()); sort(mice,mice+m,comp); for(int i=0;i<m;i++) { f[i]=1; for(int j=0;j<i;j++) if(check(mice[i],mice[j])) f[i]=max(f[j]+1,f[i]); ans=max(f[i],ans); } printf("%d",ans); return 0; }