2016秋季练习

来源:互联网 发布:塑料袋污染 数据 编辑:程序博客网 时间:2024/06/02 20:34

来源:BZOJ1207

dp,和最长上升子序列其实是一个意思的,只不过我们寻找我们下一步要打的时候是不一样的,其余的情况其实还是比较简单的

代码:

#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int n,m;const int MAXN = 10010;struct Mouse{    int x,y,time;    void input(){        scanf("%d%d%d",&time,&x,&y);    }    void get(int times,int xx,int yy){        time = times;        x = xx;        y = yy;    }}p[MAXN];inline bool check(int x,int y){    if(x<1 || x>n || y<1 || y>n) return false;    else return true;}int dp[MAXN];inline bool judge(int mid,int des){    return abs(p[mid].x-p[des].x)+abs(p[mid].y-p[des].y) <= p[des].time-p[mid].time;}int DP(){    int ans = 1;    for(int i=1;i<=m;i++) dp[i] = 1;    for(int i=1;i<=m;i++){        for(int j=1;j<=i-1;j++)         {            if(judge(j,i)) dp[i] = max(dp[i],dp[j]+1);        }        ans = max(ans,dp[i]);    }    return ans;}int main(){    scanf("%d%d",&n,&m);    for(int i=1;i<=m;i++) {        p[i].input();    }    printf("%d\n",DP());    return 0;}


0 0
原创粉丝点击