题解:做满足条件的最大上升子序列处理即可
1 #include <iostream> 2 #include <cstdio> 3 #include <cmath> 4 #include <algorithm> 5 #include <map> 6 #include <queue> 7 #include <vector> 8 #include <cstring> 9 #include <iomanip> 10 using namespace std; 11 const int N=1e4+5; 12 int t[N],x[N],y[N],dp[N]; 13 int main(){ 14 int n,m; 15 scanf("%d %d",&n,&m); 16 int mx=0; 17 for(int i=1;i<=m;i++){ 18 scanf("%d %d %d",&t[i],&x[i],&y[i]); 19 dp[i]=1; 20 for(int j=1;j<i;j++){ 21 if(abs(x[i]-x[j])+abs(y[i]-y[j])<=t[i]-t[j]) 22 dp[i]=max(dp[i],dp[j]+1),mx=max(mx,dp[i]); 23 24 } 25 } 26 printf("%d\n",mx); 27 28 return 0; 29 30 }