又是一道BZOJ的水题。
DP,F[i]表示第i只鼹鼠出现后可以砸几只。
F[i]=max(F[i],F[j]+1);
但要满足time[i]-time[j]>=abs(x[i]-x[j])+abs(y[i]-y[j])
code:
/************************************************************** Problem: 1207 User: yekehe Language: C++ Result: Accepted Time:2408 ms Memory:976 kb ****************************************************************/ #include <cstdio> #include <cmath> #include <algorithm> using namespace std; int n,m,t[10001],x[10001],y[10001],f[10001]; int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=m;i++)scanf("%d%d%d",&t[i],&x[i],&y[i]); for(int i=1;i<=m;i++){ f[i]=1; for(int j=1;j<i;j++){ if(abs(x[i]-x[j])+abs(y[i]-y[j])<=t[i]-t[j]){ f[i]=max(f[i],f[j]+1); } } } int ans=0; for(int i=1;i<=m;i++)ans=max(ans,f[i]); printf("%d",ans); return 0; }