zoukankan      html  css  js  c++  java
  • [Luogu] P2439 [SDOI2005]阶梯教室设备利用

    (Link)

    Description

    现有许多演讲要在阶梯教室中举行。每一个演讲都可以用唯一的起始和终止时间来确定,如果两个演讲时间有部分或全部重复,那么它们是无法同时在阶级教室中举行的。现在我们想要尽最大可能的利用这个教室,也就是说,我们需要在这些演讲中选择一些不重复的演讲来举行使得他们用的总时间尽可能的长。我们假设在某一演讲结束的瞬间我们就可以立即开始另一个演讲。

    读入所有演讲的起始和终止时间,计算最大的可能演讲总时间。

    Solution

    (DP)题。有挺多方法的。

    Sol1

    首先有一个最好想的(O(nk))的((k)是最大时间)。

    (dp[t])表示在(t)时间结束,最大的演讲时间。那么

    [dp[t]=max{dp[a[i].l]+a[i].r-a[i].l}(if(a[i].rle{t})) ]

    Sol2

    然后有一个妙妙的(O(n+k))的。

    我们用(vector),把每个(ed)存到(a[st])里。

    然后(DP)的时候枚举起始时间(st),在枚举对应的结束时间(ed),那么

    [dp[st]=max(dp[st-1],dp[st]+ed-st) ]

    (因为如果要一个完整的演讲,肯定就只要枚举每个(st)对应的(ed)了。其他不完整的时候,就是(dp[st]=max(dp[st],dp[st-1]))

    Sol3

    最后还有一个(O(nlog(n)))的二分优化(DP)(其实就是第一个(DP)的优化)

    先按结束时间从小到大排序。设(dp[i])表示(DP)到第(i)个演讲时最大的演讲时间。那么

    [dp[i]=max(dp[i-1],dp[pos]+a[i].ed-a[i].st)(a[pos].edle{a[i].st}) ]

    因为(ed)已经有序,而且(dp)数组肯定是单调不降的,所以我们用二分找到满足约束条件的最大的(pos)再更新就可以了

  • 相关阅读:
    理解爬虫原理
    中文词频统计与词云生成
    复合数据类型,英文词频统计
    字符串操作、文件操作,英文词频统计预处理
    了解大数据的特点、来源与数据呈现方式
    作业四-结对项目
    大数据应用期末总评
    分布式文件系统HDFS 练习
    安装Hadoop
    《恶魔人crybaby》豆瓣短评爬取
  • 原文地址:https://www.cnblogs.com/andysj/p/13903801.html
Copyright © 2011-2022 走看看