zoukankan      html  css  js  c++  java
  • 【BZOJ 1207】[HNOI2004]打鼹鼠

    【链接】 我是链接,点我呀:)
    【题意】

    在这里输入题意

    【题解】

    时间是按顺序的。 所以就有单调性啦。 写个DP就好。 设f[i]表示打第i只鼹鼠,最多能打几只鼹鼠。 则如果i和j的距离不超过它们的时间差,那么就可以从j转移到i 即f[i] = max(f[i],f[j]+1) 注意不要写成f[i] = max(f[i],f[j]+ok(i,j)); 因为j无法转移到i.那么就不能获得f[j]这个值。 (不然f[j]如果比f[i]大,那么f[i]就变成f[j]了,即使f[j]不能转移到f[i]

    【代码】

    #include <bits/stdc++.h>
    #define LL long long
    #define rep1(i,a,b) for (int i = a;i <= b;i++)
    #define rep2(i,a,b) for (int i = a;i >= b;i--)
    #define all(x) x.begin(),x.end()
    #define pb push_back
    #define lson l,mid,rt<<1
    #define rson mid+1,r,rt<<1|1
    using namespace std;
    
    const double pi = acos(-1);
    const int dx[4] = {0,0,1,-1};
    const int dy[4] = {1,-1,0,0};
    const int N = 1e4;
    
    struct abc{
        int t,x,y;
    };
    
    int n,m,f[N+10];
    abc a[N+10];
    
    int ok(int i,int j){
        int cost     = a[i].t-a[j].t;
        int temp1 = abs(a[i].x-a[j].x),temp2 = abs(a[i].y-a[j].y);
        if (temp1+temp2<=cost)
            return 1;
        else
            return 0;
    }
    
    int main(){
    	#ifdef LOCAL_DEFINE
    	    freopen("rush_in.txt", "r", stdin);
    	#endif
        scanf("%d%d",&n,&m);
        rep1(i,1,m) scanf("%d%d%d",&a[i].t,&a[i].x,&a[i].y);
        int ans = 1;
        rep1(i,1,m){
            f[i] = 1;
            rep1(j,1,i-1)
                if (ok(i,j))
                    f[i] = max(f[i],f[j]+1);
            ans = max(ans,f[i]);
        }
        printf("%d
    ",ans);
    
    	return 0;
    }
    
    
  • 相关阅读:
    Luogu P3275 糖果
    Python基础学习
    SharePoint 2013
    Office
    KnockoutJS
    SharePoint 2013
    Bootstrap
    SharePoint 2013
    CSS
    AngularJS
  • 原文地址:https://www.cnblogs.com/AWCXV/p/8597124.html
Copyright © 2011-2022 走看看