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;
}
原文地址:https://www.cnblogs.com/Narh/p/9145226.html