[HNOI2004]打鼹鼠

来源:互联网 发布:web of science数据库 编辑:程序博客网 时间:2024/06/14 02:23
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-6inline 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
原创粉丝点击