题面

题目要求出最长的空题段最短的长度,显然可以二分答案。

考虑如何 check。

设二分到的值是 \(x\),即最长的空题段长度至少为 \(x\)。

其实整个 check 的过程可以看作一个 DP,设 \(dp_i\) 表示 \(1\sim i\) 中 写第 \(i\) 道题 且 最长的空题段长度 \(\leq x\) 所需的最短时间。

由于空题段最长为 \(x\),且区间 \([i-x,\ i - 1]\) 中有 \(x\) 个点, 所以转移方程不难得出:\(dp_i=\min_{i-x-1\leq j \leq i-1}\{dp_j\} + a_i\)。

问题又变成了一个典型的滑动窗口问题,可以使用单调队列优化。

#include <bits/stdc++.h>

using namespace std;

const int N = 50003;

int n, m, t, a[N], dp[N], q[N], hh, tt, ans;

inline bool check(int x)
{
memset(dp, 0, sizeof dp);
hh = tt = 0; //队列中预先存储了一个 dp[0] = 0
for (int i = 1; i <= n; i+=1)
{
while (hh <= tt && q[hh] < i - x - 1) ++hh; //队头超出了范围
dp[i] = dp[q[hh]] + a[i]; //转移
while (hh <= tt && dp[q[tt]] >= dp[i]) --tt; //维护队列单调性
q[++tt] = i; //加入队列
}
int sum = 2000000007;
for (int i = n - x; i <= n; i+=1)
sum = min(sum, dp[i]); //求出最短的时间
return sum <= t; //最多只有 t 分钟
} int main()
{
cin >> n >> t;
for (int i = 1; i <= n; i+=1) cin >> a[i];
int l = 0, r = n;
while (l <= r)
{
int mid = (l + r) >> 1;
if (check(mid)) ans = mid, r = mid - 1;
else l = mid + 1;
}
cout << ans << endl;
return 0;
}

题解【AcWing1090】绿色通道的更多相关文章

  1. LOJ 一本通一句话题解系列:

    第一部分 基础算法 第 1 章 贪心算法 1):「一本通 1.1 例 1」活动安排:按照结束时间排序,然后扫一遍就可以了. 2):「一本通 1.1 例 2」种树:首先要尽量的往区间重叠的部分种树,先按 ...

  2. AC日记——绿色通道 codevs 3342

    3342 绿色通道  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Description <思远高考绿色通道&g ...

  3. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  4. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  5. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  6. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  7. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  8. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  9. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

随机推荐

  1. CP - OFDM

  2. 《算法导论》第二章demo代码实现(Java版)

    <算法导论>第二章demo代码实现(Java版) 前言 表示晚上心里有些不宁静,所以就写一篇博客,来缓缓.囧 拜读<算法导论>这样的神作,当然要做一些练习啦.除了练习题与思考题 ...

  3. RTEMS进程同步机制

    互斥量 好像没有互斥量,信号量接收那儿有个图,互斥量似乎术语一类特殊的信号量. 信号量 12. Semaphore Manager 12.1. Introduction The semaphore m ...

  4. python yml 文件处理

    安装 pip install pyyaml import yaml import io s = {'host': {'ip00': '10.0.0.1', 'ip01': {'one': '10.0. ...

  5. pinpoint安装(docker)

    安装docker docker-compose yum update -y yum install docker epel-release python-pip -y pip install --up ...

  6. linux中查看nginx、apache、php、mysql配置文件路径

    linux高效.稳定,但是也带来维护上的一些问题.配置文件究竟在哪里????? 如何在linux中查看nginx.apache.php.mysql配置文件路径了,如果你接收一个别人配置过的环境,但没留 ...

  7. CentOS6.5安装指定的PHP版本(php5.5)(转)

    查询是否安装有php #rpm -qa|grep php 删除之前安装的php版本 (yum install 安装) #rpm -e php-fpm-5.3.3-47.el6.x86_64 --nod ...

  8. Girlfreind:1 Vulnhub Walkthrough

    靶机链接: https://www.vulnhub.com/entry/me-and-my-girlfriend-1,409/ 主机扫描: HTTP 目录访问,提示无权限,右键源码,提示XXF即可 正 ...

  9. jni 文件切割合并

    最近学习c++,看到很多常用的例子,比如文件切割,切割后后缀可以自定义,别人就无法从表面的一个文件看出是什么,也无法查看到原文件信息,只有合并后才能识别这庐山真面目 实现也比较粗暴,首先在应用层定义好 ...

  10. mysql数据库批量执行sql文件对数据库进行操作【windows版本】

    起因: 因工作需要,在本机测试环境升级mysql数据库,需逐条执行mysql数据库的sql文件对数据库进行升级,因此找了些关于mysql的文章,对批量升级数据库所需的sql文件进行升级. 整理思路: ...