zoukankan      html  css  js  c++  java
  • JZOJ 1003【东莞市选2007】拦截导弹——dp

    题目:https://jzoj.net/senior/#main/show/1003

    只要倒推一下第一次上升的最长和第一次下降的最长就行了。不用n^2logn,枚举了 j 还要用树状数组找值比自己大的元素。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    const int N=1005;
    int n,m,a[N],up[N],dn[N],ans;
    int main()
    {
        while(1)
        {
            scanf("%d",&n);if(!n)return 0;
            ans=0;
            for(int i=1;i<=n;i++)scanf("%d",&a[i]);
            for(int i=n;i;i--)
            {
                up[i]=dn[i]=1;
                for(int j=i+1;j<=n;j++)
                    if(a[j]<a[i])
                        dn[i]=max(dn[i],up[j]+1);
                    else if(a[j]>a[i])
                        up[i]=max(up[i],dn[j]+1);
                ans=max(ans,dn[i]);
            }
            printf("%d
    ",ans);
        }
    }
  • 相关阅读:
    MQ
    redis
    MongoDB
    进程相关命令
    catalina.sh
    tomcat-jvm
    中间件简介
    websphere
    mysql
    shell变量与字符串操作
  • 原文地址:https://www.cnblogs.com/Narh/p/9427442.html
Copyright © 2011-2022 走看看