1 #include<cstdio> 2 #include<iostream> 3 #include<cmath> 4 using namespace std; 5 int x[10008],y[10009],z[10008],f[10008],n,m,max1; 6 int main() 7 { 8 scanf("%d%d",&n,&m); 9 for(int i=1;i<=m;i++) 10 scanf("%d%d%d",&x[i],&y[i],&z[i]); 11 for(int i=1;i<=m;i++) 12 { 13 f[i]=1; 14 for(int j=1;j<i;j++) 15 if(f[i]<=f[j]&&fabs(y[i]-y[j])+fabs(z[i]-z[j])<=x[i]-x[j]) 16 f[i]=f[j]+1; 17 if(max1<f[i]) 18 max1=f[i]; 19 } 20 printf("%d\n",max1); 21 return 0; 22 }
n^2的线性dp f[i]表示前x[i]时间内打死第i只地鼠时,最多能打死多少只地鼠。