Dp神题啊,自己意会啊,地鼠要轮流打,顺着打,倒着打你可以过你就可以倒着AK省选了。 就是判断它们两个的距离符不符合情况,符合的话就继承最大值,不是的话什么都不要做。#include<map> #include<queue> #include<cmath> #include<cctype> #include<cstdio> #include<cstring> #include<cstdlib> #include<iostream> #include<algorithm> #define qread(x) x=read() #define mes(x,y) memset(x,y,sizeof(x)) #define mpy(x,y) memcpy(x,y,sizeof(x)) #define Maxn 1000 #define Maxm 10000 #define INF 2147483647 #define eps 1e-6 inline int read(){ char ch=getchar(); int f=1,x=0; 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; } struct Mouse{ int x,y,t,f; }M[Maxm+1]; int n,m,ans; int main(){ qread(n);qread(m); for(int i=1;i<=m;i++){ qread(M[i].t);qread(M[i].x);qread(M[i].y); M[i].f=1; } for(int i=2;i<=m;i++){ for(int j=1;j<i;j++){ if(abs(M[i].x-M[j].x)+abs(M[i].y-M[j].y)<=M[i].t-M[j].t){ M[i].f=std::max(M[i].f,M[j].f+1); } } } ans=0; for(int i=1;i<=m;i++)ans=std::max(ans,M[i].f); printf("%d\n",ans); }
查看原文:http://hz2016.tk/blog/?p=71
[HNOI2004]打鼹鼠
最新推荐文章于 2020-02-07 15:21:14 发布