bzoj1207(HNOI2004)打鼹鼠
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1207
n^2DP。其实是不能过的吧,但数据水。
似乎有nlogn优化?
可以加小小优化,就是记录一下mx[ i ]表示前 i 个中dp的最大值,然后 j 倒着转移,一旦dp[ i ]>=mx[ j ]就跳出。
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<cstdlib> using namespace std; const int N=1e5+5; int n,m,dp[N],ans=1,x[N],y[N],t[N]; bool pd(int u,int v) { return abs(x[u]-x[v])+abs(y[u]-y[v])<=abs(t[u]-t[v]); } int main() { scanf("%d%d",&n,&m); for(int i=1;i<=m;i++) { scanf("%d%d%d",&t[i],&x[i],&y[i]); dp[i]=1; for(int j=1;j<i;j++) if(pd(i,j)) dp[i]=max(dp[i],dp[j]+1); ans=max(ans,dp[i]); } printf("%d",ans); return 0; }