题目传送门

高二数学《绿色通道》总共有 nn 道题目要抄,编号 1,2,…,n,抄第 i 题要花 ai 分钟。

小 Y 决定只用不超过 t 分钟抄这个,因此必然有空着的题。

每道题要么不写,要么抄完,不能写一半。

下标连续的一些空题称为一个空题段,它的长度就是所包含的题目数。

这样应付自然会引起马老师的愤怒,最长的空题段越长,马老师越生气。

现在,小 Y 想知道他在这 t 分钟内写哪些题,才能够尽量减轻马老师的怒火。

由于小 Y 很聪明,你只要告诉他最长的空题段至少有多长就可以了,不需输出方案。

输入格式

第一行为两个整数 n,t。

第二行为 n 个整数,依次为 a1,a2,…,an。

输出格式

输出一个整数,表示最长的空题段至少有多长。

数据范围

0<n≤5×104
0<ai≤3000
0<t≤108

输入样例:

17 11
6 4 5 2 5 3 4 5 2 3 4 5 2 3 6 3 5

输出样例:

3

题解:

二分算法枚举最大空白题目数的长度

对于当前数x, f(i)表示合法且选第 i 道的最小花费, 则 f(i) = min(f(j)) + a[i] (i - x <= j <= i)

根于条件(i - x <= j <= i) 可以判断是单调队列滑动窗口问题

#include<iostream>
#include<cstring>
using namespace std;
const int N = 5e4 + 10;
int n, m;
int a[N];
int q[N], f[N];
bool chick(int x)
{int l = 0, r = 0;f[0] = 0;for(int i = 1; i <= n; i++){while(i - q[l] > x + 1 && l <= r) l++;f[i] = f[q[l]] + a[i];while(l <= r && f[i] <= f[q[r]])r--;q[++r] = i;}int ans = 1e9;for(int i = n - x; i <= n; i++) ans = min(ans, f[i]);return ans <= m;
}
int main()
{cin >> n >> m;for(int i =1; i <= n; i++)cin >> a[i];int l = 0, r = n;while(l < r){int mid = l + r >> 1;if(chick(mid)) r = mid;else l = mid + 1;}cout << r << endl;return 0;
}

AcWing1090.绿色通道(单调队列DP)相关推荐

  1. bzoj1791,P4381-[IOI2008]Island【基环树,树形dp,单调队列dp,树的直径】

    正题 评测记录:https://www.luogu.org/recordnew/lists?uid=52918&pid=P4381 题目大意 有n个岛,n条无向边(保证每个岛都有边连到).走过 ...

  2. P3580 [POI2014]ZAL-Freight(单调队列dp)

    P3580 [POI2014]ZAL-Freight(单调队列dp) 考虑两辆车怎么样是最优的. t1,t2,St_1,t_2,St1​,t2​,S t1+St_1+St1​+S 第一辆车:[t1,t ...

  3. 刷题总结——烽火传递(单调队列+dp)

    题目: 题目描述 烽火台又称烽燧,是重要的防御设施,一般建在险要处或交通要道上.一旦有敌情发生,白天燃烧柴草,通过浓烟表达信息:夜晚燃烧干柴,以火光传递军情.在某两座城市之间有 n 个烽火台,每个烽火 ...

  4. POJ 1821 单调队列+dp

    题目大意:有K个工人,有n个墙,现在要给墙涂色.然后每个工人坐在Si上,他能刷的最大范围是Li,且必须是一个连续子区间,而且必须过Si,他刷完后能获得Pi钱 思路:定义dp[i][j]表示前i个人,涂 ...

  5. P3957-跳房子【单调队列,dp,二分】

    前言 链接: https://www.luogu.org/record/show?rid=7915892 这就是之前普及组的第四题- 大意 有n个格子,每个格子有价值.机器人有固定的跳跃距离d,用k个 ...

  6. BZOJ 1791 岛屿(环套树+单调队列DP)

    题目实际上是求环套树森林中每个环套树的直径. 对于环套树的直径,可以先找到这个环套树上面的环.然后把环上的每一点都到达的外向树上的最远距离作为这个点的权值. 那么直径一定就是从环上的某个点开始,某个点 ...

  7. codeforces - 1216F WIFI(单调队列+DP)

    传送门 题意:有n个房间,需要把n个房间全部连上网,可以使用i的代价直接将第i个房间连上网.有一些房间可以放路由器,代价也是他的标号i,路由器可以使得i-k,到i+k之间所有房间通上网,求最小代价使得 ...

  8. Codeforces Round #466 (Div. 2): E. Cashback(单调队列+DP)

    题目链接:http://codeforces.com/contest/940/problem/E 题意:给你一个长为n的序列和一个数字c,你要将这个序列切成若干段,对于每一段,这段中最小的[n/c]个 ...

  9. 【CF940E】Cashback(单调队列dp)

    传送门 Solution: 既然是删掉k/c个,那么k<c是不删除的无意义,k=c删除1个,c<=k<2c还是删除1个,那么相当于第c+1个到第k个放在上一区间是无意义的.证明:假如 ...

最新文章

  1. LigerUI——天外飞仙
  2. linux数组删除数据,JavaScript在数组的循环中删除元素
  3. C++编程基础二 04-默认实参
  4. python主要数据变量及其类型说明_Python的数据类型和变量
  5. component是什么接口_逐行解读Spring(二)什么,自定义标签没听说过?
  6. Bumblebee微服务网关之负载策略
  7. ubuntu使用root权限登录的设置方法
  8. java 6 linux_CentOS 6.5 安装java
  9. 哨兵2影像的分幅分割-深度学习的样本制备基础
  10. dism++封装系统使用教程_dism++封装系统使用教程_win7系统部署工具Dism的操作方法...
  11. 数学分析-1.2数列和收敛数列-例题1、2、3
  12. 【深入理解JS核心技术】14. 什么是一元函数
  13. kaldi_源码笔记 thchs-30_data_prep
  14. 前端开发笔记:记一次网站创建的过程
  15. Python 简易版贪食蛇(源代码)
  16. python反向切片_python切片
  17. 是时候好好审视下自己了
  18. 学习JBPM 工作流引擎 API方法(二)
  19. 基于 Marvell 88Q2112 车载以太网 物理层收发器
  20. python ray定时_使用 Ray 用 15 行 Python 代码实现一个参数服务器

热门文章

  1. Java 继承——3
  2. zookeeper使用分布式锁
  3. [Coci2015]Divljak
  4. [poj1410]Intersection
  5. 谈谈浮动和清除浮动?
  6. oc-10-对象做参数
  7. 截取字符串--sql和access的区别
  8. -2147467259
  9. 【数据库系统设计】数据库安全性
  10. 【Zepto笔记】Zepto.js