和最近的一个出的题很像,都是倒着这样的.
思路
不妨设表示为消灭了节点的鼠,并且在节点所能获得的最大收益是多少.
很显然的方程:
.
这样这个问题就解决了.
代码
#include <bits/stdc++.h> using namespace std; const int N=1e4+5; int f[N],x[N],y[N],Time[N]; int main() { int n,m,ans=0; cin>>n>>m; for(int i=1;i<=m;i++) { cin>>Time[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])<=Time[i]-Time[j]) f[i]=max(f[i],f[j]+1); } ans=max(ans,f[i]); } printf("%d\n",ans); return 0; }