• 洛谷 P1091合唱队列


    吾王剑之所指,吾等心之所向                           ——《Fate/stay night》

    题目:https://www.luogu.org/problem/P1091

    这题应该来说,是一道比较经典,也比较简单的动规题。

    它的模板性质也很明显——

    就是最长上升子序列

    所以应该会动规的看见那个T1<T2<...<Ti>Ti+1>...>Tk就知道了吧

    那这题还要考虑一点点,出去的最少,就意味着留下的最多,

    那么LIS实锤:

    只要把每个点为首的 的向左的最长下降子序列以及它 的向右的最长上升子序列 都求出来,然后相加,就是它为中央的留下的最多人数了。

    好了,上代码:

    #include<bits/stdc++.h>
    using namespace std;
    int n,maxn=0;
    int a[105];
    int f[105][4];
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++) 
        {
            scanf("%d",&a[i]);
            f[i][1]=f[i][2]=1;
        }
        
        for(int i=2;i<=n;i++)
        {
            for(int j=1;j<i;j++)
            {
                if(a[i]>a[j]&&f[j][1]>=f[i][1])
                {
                    f[i][1]=f[j][1]+1;
                } 
            }
        }
        for(int i=n-1;i>=1;i--)
        {
            for(int j=i+1;j<=n;j++)
            {
                if(a[i]>a[j]&&f[j][2]>=f[i][2])
                {
                    f[i][2]=f[j][2]+1;
                }
            }
        }//求最长上升子序列和最长下降子序列
        
        for(int i=1;i<=n;i++)
        {
            f[i][3]=f[i][1]+f[i][2]-1;
            if(f[i][3]>maxn)
                maxn=f[i][3];//这是保留的人数 
        }
        printf("%d
    ",n-maxn);//n-maxn是踢掉的人数 
        return 0;
    }

    我最开始输出的是maxn,结果就过了两个点

    还是那句话——

    细节决定成败啊!!!!!

  • 相关阅读:
    webpack
    react 原理
    jest
    input 自动获取焦点
    taro
    html5标签
    webpack
    每日日报
    每日日报
    每日日报
  • 原文地址:https://www.cnblogs.com/fjnhyzcrx-Mayuri/p/11525133.html
Copyright © 2020-2023  润新知