高二数学《绿色通道》总共有 n 道题目要抄,编号 1…n,抄第 i 题要花 ai 分钟。小 Y 决定只用不超过 t 分钟抄这个,因此必然有空着的题。每道题要么不写,要么抄完,不能写一半。下标连续的一些空题称为一个空题段,它的长度就是所包含的题目数。这样应付自然会引起马老师的愤怒,最长的空题段越长,马老师越生气。
现在,小 Y 想知道他在这 t 分钟内写哪些题,才能够尽量减轻马老师的怒火。由于小 Y 很聪明,你只要告诉他最长的空题段至少有多长就可以了,不需输出方案。
思路
由于最长长度和最短时间都不确定。我们可以假设其中一项确定来思考。
考虑二分答案,二分最长空题段。
假设二分当前最长空题段为 k,我们就可以尝试dp处理。
设 dpi 表示第 i 题做,且前 i 题的最长空题段小于等于 k 时的最短时间,我们可以枚举上一条做了的题,即:
#include<bits/stdc++.h> usingnamespace std; #define int long long #define N 500010 int n, m, i, j, k; int l, r, mid, ans; int dp[N], a[N], t; pair<int , int>p; deque<pair<int, int> >q;