• 小杨排队(dp)


    链接:https://ac.nowcoder.com/acm/contest/3667/J

    题目描述

    小阳想要买个东西,然后就去了商店,发现进商店需要排队(生意太火爆!),然后就开始漫长的等待,他觉得自己
    太无聊,便开始思考一个问题,这个队伍的人每个人可以做两种操作,插到队头或者队尾,然后问你最小的操作次数
    使队伍有序

    输入描述:

    第一行  输入一个t,代表数据组数(1<=t<=10)
    第二行 输入一个n,代表n个人在这里排队(1<=n<=500000)
    第三行  这一行n个数,是n个数的排列,代表每个人的身高

    输出描述:

    有t行,每行一个数,代表最小的操作次数使它有序
    示例1

    输入

    复制
    2
    5
    1 3 5 2 4
    3
    2 3 1

    输出

    复制
    3
    1

    AC代码:
    #pragma GCC optimize(2)
    #include<bits/stdc++.h>
    using namespace std;
    inline int read() {int x=0,f=1;char c=getchar();while(c!='-'&&(c<'0'||c>'9'))c=getchar();if(c=='-')f=-1,c=getchar();while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar();return f*x;}
    typedef long long ll;
    const int maxn = 1e7+10;
    int a[maxn],dp[maxn];
    int main()
    {
        int t;
        t=read(); 
        while(t--){
            int n;
            n=read();
            for(int i=1;i<=n;i++){
                a[i]=read();
                dp[i]=0;
            }
            int ans=0;
            for(int i=1;i<=n;i++){
                dp[a[i]]=max(dp[a[i]-1]+1,dp[a[i]]);
                ans=max(dp[a[i]],ans);
            }
            printf("%d
    ",n-ans);
        }
        return 0;
    }
  • 相关阅读:
    STR[#6]
    整数
    一些应该记住的东西(持续更新?再也不会更新了)
    退役后的续命杂谈
    51Nod 快速傅里叶变换题集选刷
    支配树学习笔记
    动态点分治入门随讲
    KD树小结
    HNOI2013 BZOJ3142 数列
    BZOJ2001 HNOI2010 城市建设
  • 原文地址:https://www.cnblogs.com/lipu123/p/12155214.html
Copyright © 2020-2023  润新知