zoukankan      html  css  js  c++  java
  • 合唱队形(DP)

    原题传送门

    这道题目就是裸的DP题,

    我们所需要得到的是一个倒V形的数列

    即一个上升子序列与下降子序列的合体。。

    所以我们只需要做一遍从1到n的最长上升子序列和从n到1的最长上升子序列即可

    时间复杂度O(n^2)

    下面贴代码

    #include<cstdio>
    #define MN 101
    #define max(a,b) (a)>(b)?(a):(b)
    using namespace std;
    int num[MN],ss[MN],xj[MN];
    int n,ans;
    int main(){
        scanf("%d",&n);
        for(int i=1;i<=n;i++)scanf("%d",&num[i]);
        ss[1]=xj[n]=1;
        for(int i=2;i<=n;i++)
        {    
            ss[i]=1;
            for(int j=1;j<i;j++)
            if(num[j]<num[i])ss[i]=max(ss[i],ss[j]+1);
        }
        for(int i=n-1;i>=1;i--)
        {
            xj[i]=1;
            for(int j=i+1;j<=n;j++)
            if(num[j]<num[i])xj[i]=max(xj[i],xj[j]+1);
        }
        for(int i=1;i<=n;i++)ans=max(ans,ss[i]+xj[i]-1);
        printf("%d
    ",n-ans);
        return 0;    
    }
  • 相关阅读:
    mysql日志
    验证栈序列
    限流方案分析
    集合
    数据结构-树
    链表的中间节点
    PHP实现链表
    php扩展安装方式
    2017 Multi-University Training Contest
    用LCT解一类动态图的问题
  • 原文地址:https://www.cnblogs.com/ghostfly233/p/6995242.html
Copyright © 2011-2022 走看看