zoukankan      html  css  js  c++  java
  • 7-2 列车调度 (25 分)

    题目:

    样例输入:

    9
    8 4 2 5 3 9 1 6 7

    样例输出:

    4

    思路:

    要想得到最少的调度序列,那就要找出最少的下降序列的个数。拿上边的例子来说:有如下四个下降序列

    8 4 2 1

    5 3

    9 6

    7

    所以只需要四个调度队列就可以了。

    又根据定理:最小的下降序列的个数等于最长上升子序列的长度。(这个定理证明没看懂,直接懵逼,菜是原罪啊!!)剩下的就是一个裸的最长上升子序列问题了。

    代码:

    #include <bits/stdc++.h>
    #define inf 0x3f3f3f3f
    using namespace std;
    typedef long long ll;
    const int maxn = 1e5+10;
    int a[maxn],dp[maxn];
    int main()
    {
        int n;
        scanf("%d",&n);
        for(int i = 0; i<n; i++)
        {
            scanf("%d",&a[i]);
            dp[i] = inf;
        }
        int mmax = -1;
        for(int i = 0; i<n; i++)
        {
            int k = lower_bound(dp,dp+n,a[i])-dp;
            dp[k] = a[i];
            mmax = max(mmax, k+1);
        }
        printf("%d
    ",mmax);
        return 0;
    }
    View Code
  • 相关阅读:
    iOS 面向对象
    iOS 构建动态库
    iOS 单例
    iOS 操作系统架构
    iOS 编译过程原理(1)
    Category
    CoreText
    dyld
    block
    (CoreText框架)NSAttributedString 2
  • 原文地址:https://www.cnblogs.com/sykline/p/9830505.html
Copyright © 2011-2022 走看看