题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1207
这题和求LIS有点像,打这一只鼹鼠一定可以从打上一只鼹鼠转移过来;
所以不用考虑机器人移动啦、格子边界啦等等问题;
注意状态不能是“打前i只鼹鼠”而必须是“打第i只鼹鼠及以前”,这样每个状态都固定在它所表示的那一只鼹鼠上,才可以转移。
代码如下:
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<cstdlib> using namespace std; int const maxn=10005; int n,m,tim[maxn],x[maxn],y[maxn],f[maxn],ans; bool pd(int i,int j) { int t=tim[j]-tim[i]; int s=abs(y[j]-y[i])+abs(x[j]-x[i]); return s<=t; } int main() { scanf("%d%d",&n,&m); for(int i=1;i<=m;i++) scanf("%d%d%d",&tim[i],&x[i],&y[i]); f[1]=1;ans=1;//! for(int i=2;i<=m;i++) { // f[i]=f[1]+pd(1,i); f[i]=1; for(int j=1;j<i;j++) if(pd(j,i))f[i]=max(f[i],f[j]+1); ans=max(ans,f[i]); } printf("%d",ans); return 0; }