题目大意:n*n的网格中,已知某时刻某个格子会有鼹鼠出现,若你和鼹鼠在同一个格子就可以打,你每一时刻能够移动一格或停留在原地不动,不能走出网格。开始时可以自由选定初始位置。求最大数量
题解:开始想要三维暴力……被二维吓尿了……后来发现是sb dp啊,如果打完i鼹鼠后可以在限定时间内跑到j鼹鼠处,那么i的值就可以由j转移得来(j小于i),就变成LIS了
#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;
const int M=10005;
int n,m,ans;
int x[M],y[M],t[M],f[M];
int dis(int a,int b){return abs(x[b]-x[a])+abs(y[b]-y[a]);}
void work()
{
for(int i=1;i<=m;i++)
{
f[i]=1;
for(int j=1;j<i;j++)
if(dis(i,j)<=t[i]-t[j]) f[i]=max(f[i],f[j]+1);
ans=max(ans,f[i]);
}
cout<<ans<<endl;
}
void init()
{
cin>>n>>m;
for(int i=1;i<=m;i++)
scanf("%d%d%d",&t[i],&x[i],&y[i]);
}
int main()
{
init();
work();
return 0;
}