zoukankan      html  css  js  c++  java
  • 小杨排队(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;
    }
  • 相关阅读:
    第八次作业
    微信用户体验
    •设计一款给爸爸妈妈用的手机
    对类的继承
    必应词典
    第二次作业二
    第二次作业
    我想搞的软工
    数字签名
    C++的学习心得
  • 原文地址:https://www.cnblogs.com/lipu123/p/12155214.html
Copyright © 2011-2022 走看看