bzoj1207 [HNOI2004]打鼹鼠——LIS

题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1207

这题和求LIS有点像,打这一只鼹鼠一定可以从打上一只鼹鼠转移过来;

所以不用考虑机器人移动啦、格子边界啦等等问题;

注意状态不能是“打前i只鼹鼠”而必须是“打第i只鼹鼠及以前”,这样每个状态都固定在它所表示的那一只鼹鼠上,才可以转移。

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
using namespace std;
int const maxn=10005;
int n,m,tim[maxn],x[maxn],y[maxn],f[maxn],ans;
bool pd(int i,int j)
{
    int t=tim[j]-tim[i];
    int s=abs(y[j]-y[i])+abs(x[j]-x[i]);
    return s<=t;
}
int main()
{
    scanf("%d%d",&n,&m);
    for(int i=1;i<=m;i++)
        scanf("%d%d%d",&tim[i],&x[i],&y[i]);
    f[1]=1;ans=1;//!
    for(int i=2;i<=m;i++)
    {
//        f[i]=f[1]+pd(1,i);
        f[i]=1;
        for(int j=1;j<i;j++)
            if(pd(j,i))f[i]=max(f[i],f[j]+1);
        ans=max(ans,f[i]);
    }
    printf("%d",ans);
    return 0;
}

 

posted @ 2018-06-06 10:39  Zinn  阅读(138)  评论(0编辑  收藏  举报