首页 > 其他分享 >1090. 绿色通道

1090. 绿色通道

时间:2024-06-18 10:56:53浏览次数:21  
标签:1090 int back mid 绿色通道 空题 ans dp

// 1090. 绿色通道.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#define  _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstring>
#include <deque>

using namespace std;
/*
* https://www.acwing.com/problem/content/1092/
高二数学《绿色通道》总共有 n道题目要抄,编号 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
*/


const int N = 50010;
int arr[N];
int dp[N];
int n, t;


bool check(int x) {
	memset(dp, 0x3f, sizeof dp);
	dp[0] = 0;
	deque<int> q;
	q.push_back(0);
	for (int i = 1; i <= n; i++) {
		while (!q.empty() && i-q.front()  > x+1) q.pop_front();
		dp[i] = arr[i] + dp[q.front()];
		while (!q.empty() && dp[q.back()] >= dp[i]) q.pop_back();
		q.push_back(i);
	}
	int  ans = 99999999;
	for (int i = n; i >= max(0,n - x); i--) {
		ans = min(ans,dp[i]);
	}

	return ans <= t;
}


int main()
{
	//cin >> n >> t;
	scanf("%d%d",&n,&t);
	for (int i = 1; i <= n; i++) {
		//cin >> arr[i];
		scanf("%d",&arr[i]);
	}

	int l = 0; int r = n;
	while (l < r) {
		int mid = (l + r) >> 1;
		if (check(mid) == true) {
			r = mid;
		}
		else {
			l = mid + 1;
		}
	}

	//cout << l << endl;
	printf("%d\n",l);

	return 0;
}

我的视频题解空间

标签:1090,int,back,mid,绿色通道,空题,ans,dp
From: https://www.cnblogs.com/itdef/p/18253893

相关文章

  • 洛谷1090 合并果子 【贪心】
    [NOIP2004提高组]合并果子/[USACO06NOV]FenceRepairG题目描述在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。多多决定把所有的果子合成一堆。每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出......
  • 洛谷题单指南-贪心-P1090 [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G
    原题链接:https://www.luogu.com.cn/problem/P1090题意解读:两两合并,是典型的哈夫曼编码算法思想,贪心即可。解题思路:要是合并体力消耗最少,就要让尽可能少的果子越晚合并越好,因此,贪心策略为优先选择数量最少的两堆果子合并,一直到剩下一堆果子,把合并过程中的消耗值累加即可,要快速......
  • LY1090 [ 20230220 CQYC模拟赛IX T1 ] 矩阵
    题意给定一个矩阵,你需要支持:循环左移循环右移循环下移循环上移按行置换求逆按列置换求逆Sol前\(4\)个操作是\(trivial\)的。如何处理后两个操作?考虑设一个三元组:\((x,y,A_{xy})\)。每次操作,对于每一个元素都能确定操作后另外某个元素。不难发现后两个操作就......
  • P1090 [NOI洛谷P2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G
    可以用堆来实现,或者更简单一点的优先队列优先队列:#include<queue>priority_queue<int,vector<int>,greater<int>>q;因为每次合并后,最小的两个值都会更新,所以可以很好的利用优先队列内元素有序的特点,减少因反复排序带来的时间复杂度;一开始我用STL自带的排序sort,报了5个TLE,后来意......
  • P1090 [NOIP2004 提高组] 合并果子
    原题链接题解每次从所有果子堆中选重量最小的两堆并累加,观察到只需要找出最小因此考虑用堆代码#include<bits/stdc++.h>usingnamespacestd;intpile[10005]={0};intlen=0;voidin(intx){pile[++len]=x;intnow=len;while(pile[now]<pile[now/2]......
  • 洛谷p1090__合并果子
    合并果子可以作为mulitset的板子题 mulitset的accode#include<iostream>#include<set>usingnamespacestd;multiset<int,less<int>>m;intmain(){intn;cin>>n;for(inti=0;i<n;i++){intt;cin>......
  • 面试碰壁如何力挽狂澜,有了这份Android指南你也可以有绿色通道!
    简历怎样写才能过初步筛选?大厂面试到底要求什么,关注什么?技术面试如何展示自己的实力?95%的面试者都有这些疑问,所以今天,给大家分享一些面试准备的干货:一、简历要有含金量一份漂亮的简历就是你进入大厂的敲门砖。网上有很多教程教大家如何写出一份漂亮的简历,这里我就不做重复劳动了今......
  • UVA11090 Going in Cycle!!题解
    题目大意给定一个N个点M条边的带权有向图,求平均值最小的回路。解法看到这种题目,喜欢打暴力的我一下就想到:遍历整个图,找到每一个环,然后算出它们的平均值,最后比较出最小值。然而,呃...,会T飞...既然我们不能暴力找最小值,那还有什么别的办法吗?我们只需要输出一个最小值就行了,既然......
  • UVA10902 Pick-up Sticks 题解
    Description按顺序给出\(n\)个棍子两个端点的坐标。如果后来的棍子与前边的棍子相交,则说后面的把前面的挡住了。问最后有多少个棍子没被挡住。\(n\leq10^5\),且答案不超过\(1000\)。Solution叉积基本运用。定义:\(\overrightarrow{a}\times\overrightarrow{b}=|\over......
  • PAT Basic 1090. 危险品装箱
    PATBasic1090.危险品装箱1.题目描述:集装箱运输货物时,我们必须特别小心,不能把不相容的货物装在一只箱子里。比如氧化剂绝对不能跟易燃液体同箱,否则很容易造成爆炸。本题给定一张不相容物品的清单,需要你检查每一张集装箱货品清单,判断它们是否能装在同一只箱子里。2.输入格......