【洛谷p2837】晚餐队列安排】的更多相关文章

P2837 晚餐队列安排 题目背景 Usaco Feb08 Bronze 题目描述 为了避免餐厅过分拥挤,FJ要求奶牛们分2批就餐.每天晚饭前,奶牛们都会在餐厅前排队入内,按FJ的设想,所有第2批就餐的奶牛排在队尾,队伍的前半部分则由设定为第1批就餐的奶牛占据.由于奶牛们不理解FJ的安排,晚饭前的排队成了一个大麻烦. 第i头奶牛有一张标明她用餐批次D_i(1 <= D_i <= 2)的卡片.虽然所有N头奶牛排成了很整齐的队伍,但谁都看得出来,卡片上的号码是完全杂乱无章的. 在若干次混乱的重新排…
传送 特写此篇,纪念不用dp做dp题 洛谷说这是个dp,但我不信(其实就是不会dp),因此我们考虑用另一种思路.修改后的队列每一个 数a[i]一定满足a[i]<=a[i+1],那修改后的顺序就是一个不下降序列.为了求出最少要改的数,只要求出原来的序列中最长不下降子序列的长度l,再用n减去即可.求l的方式和导弹拦截的(1)差不多,只需要改大于小于就行.(详情请见邱大佬的导弹拦截题解) 代码奉上 #include<iostream> #include<cstdio> #inclu…
此题可能用动规不太好做,主要是状态转移方程很难想个人认为,思维发散的大佬们忽视. 我看了这位大佬的dp题解后才想到了方程,在此受我一膜%%% 嗯,说下思路: 先用a[i]数组存一下输入的编号: 然后用二维数组dp[i][0/1]来表示当前第i头奶牛的编号改成1或2所用的最少次数(0表示改成1,1表示改成2) 当然要考虑当前第i的奶牛的编号是1还是2: 重点来了!!! 如果是1那么  dp[i][0]=dp[i-1][0]:dp[i][1]=min(dp[i-1][0],dp[i-1][1])+1…
题目传送门 怎么说呢,这个题目我刚开始随便乱搞了几下,交了个暴力代码上去居然还水了49分,数据确实有点弱啊,然后看到洛谷上那位大佬Redbag的题解瞬间就佩服的五体投地,那真的是简洁.易懂又高效.直接用一个结构体和一个优先队列,两边贪心扫过去就水过了......Orz.我想我不需要多说,看代码就可以懂了: #include<cstdio> #include<cstring> #include<cstdlib> #include<iostream> #incl…
最近没有更新博客,全是因为英语,英语太难了QWQ 洛谷春令营的作业我也不会(我是弱鸡),随机跳了2个题,难度不高,还是讲讲吧,学学新算法也好(可以拿来水博客) 第一题就是这个小明的游戏 小明最近喜欢玩一个游戏.给定一个 n×m的棋盘,上面有两种格子#和@.游戏的规则很简单:给定一个起始位置和一个目标位置,小明每一步能向上,下,左,右四个方向移动一格.如果移动到同一类型的格子,则费用是0,否则费用是1.请编程计算从起始位置移动到目标位置的最小花费. 输入格式 输入文件有多组数据. 输入第一行包含两…
链接: P5785 弱化版:P2365 题意: 有 \(n\) 个任务待完成,每个任务有一个完成时间 \(t_i\) 和费用系数 \(f_i\),相邻的任务可以被分成一批.从零时刻开始这些任务会被机器分批完成,在每批任务开始前机器有一个给定启动时间 \(s\),一批任务的完成时间是这批任务完成时间之和,同一批任务视作在同一时刻完成. 每个任务的费用是他的完成时刻和费用系数的乘积,请最小化总费用. 分析: 如果设 \(dp[i]\) 为第 \(i\) 个任务作为当前这一批任务的最后一个时的最优解,…
(一定要先贴一下wz大佬对这道题的定位:) 另外说一句:我终于在拖了nnnnnnnnn天之后做完了这道题 算法标签:(其实也用不到辽上面都有)但我就是要贴一下咬我啊) 好啦好啦,上 思路: 首先为了节省空间,我令1=>0     2=>1:开了一个二维数组f[i][1/0](为什么开f呢,因为发)用f[i][1]代表第i项为2时需要改动的最小个数,用f[i][0]表示第i项为1时需要改动的最小个数.这样形成递推: ;i<=n;i++) { ){//第i个数为1时 ]=f[i-][];//…
任务安排1(小数据):https://www.luogu.com.cn/problem/P2365 任务安排2(大数据):https://www.luogu.com.cn/problem/P5785 题目描述 有 \(N\) 个任务排成一个序列在一台机器上等待执行,它们的顺序不得改变.机器会把这 \(N\) 个任务分成若干批,每一批包含连续的若干个任务.从时刻 \(0\) 开始,任务被分批加工,执行第 \(i\) 个任务所需的时间是 \(T_i\).另外,在每批任务开始前,机器需要 \(S\)…
题目背景 小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章. 题目描述 这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换.对于每个英文单词,软件会先在内存中查找这个单词的中文含义,如果内存中有,软件就会用它进行翻译:如果内存中没有,软件就会在外存中的词典内查找,查出单词的中文含义然后翻译,并将这个单词和译义放入内存,以备后续的查找和翻译. 假设内存中有M个单元,每单元能存放一个单词和译义.每当软件将一个新单词存入内存前,如果当前内存中已存入的单…
我们不难发现先被切开的两半一定比后被切开的两半大,这样就天然的生成了队列的单调性,就可以省去一个log.所以,我们开三个队列,分别为origin,big,smallorigin, big, smallorigin,big,small,每次查询时将三个队列的对头进行比较即可. Code: #include<cstdio> #include<queue> #include<cmath> #include<algorithm> using namespace st…
吾王剑之所指,吾等心之所向                           ——<Fate/stay night> 题目:https://www.luogu.org/problem/P1091 这题应该来说,是一道比较经典,也比较简单的动规题. 它的模板性质也很明显—— 就是最长上升子序列 所以应该会动规的看见那个T1<T2<...<Ti>Ti+1>...>Tk就知道了吧 那这题还要考虑一点点,出去的最少,就意味着留下的最多, 那么LIS实锤: 只要把每…
洛谷题目链接:任务安排 题目描述 N个任务排成一个序列在一台机器上等待完成(顺序不得改变),这N个任务被分成若干批,每批包含相邻的若干任务.从时刻0开始,这些任务被分批加工,第i个任务单独完成所需的时间是Ti.在每批任务开始前,机器需要启动时间S,而完成这批任务所需的时间是各个任务需要时间的总和(同一批任务将在同一时刻完成).每个任务的费用是它的完成时刻乘以一个费用系数Fi.请确定一个分组方案,使得总费用最小. 例如:S=1:T={1,3,4,2,1}:F={3,2,3,3,4}.如果分组方案是…
队列安排 思路: 链表裸题: 来,上代码: #include <cstdio> #include <cstring> #include <iostream> using namespace std; #define maxn 100005 struct ListType { int pre,suc,key; }; ]; ,n,m,sta=,End=,to[maxn]; inline void in(int &now) { ; ') Cget=getchar();…
洛谷题目传送门 安利蒟蒻斜率优化总结 由于人是每次都是连续一段一段地选,所以考虑直接对\(x\)记前缀和,设现在的\(x_i=\)原来的\(\sum\limits_{j=1}^ix_i\). 设\(f_i\)为安排前\(i\)个人的最大值\((f_0=0)\) \(f_i=\max\limits_{j=0}^{i-1}\{f_j+a(x_i-x_j)^2+b(x_i-x_j)+c\}\) \(\quad=\max\limits_{j=0}^{i-1}\{f_j-2ax_ix_j+ax_j^2-b…
洛谷题目传送门 设抛物线方程为\(y=ax^2+bx(a<0,b>0)\),我们想要求出一组\(a,b\)使得它尽可能满足更多的要求.这个显然可以二分答案. 如何check当前的\(mid\)是否合法呢?每一个限制条件形如\(y_{i_1}\le ax_i^2+bx_i\le y_{i_2}\),也就是\(\frac{y_{i_1}}{x_i}\le x_ia+b\le \frac{y_{i_2}}{x_i}\).把\(a,b\)看成自变量,实际上每个不等式就是一个半平面,我们需要求出半平面交…
(是时候为五一培训准备真正的技术了qwq) part1  队列(FIFO) 算法简介: FIFO:First In First Out(先进先出) 队列是限定在一端进行插入,另一端进行删除的特殊线性表. 允许出队的一头叫做队头(head||front),允许出队的一端称为队尾(rear||tail)所有需要进队的数据项,只能从队尾进入,队列中的数据只能从队头离去qwq. 今天wz小姐姐讲惹一小时滴不知道有什么用滴东西qwq,这里做个笔记吧ヽ(•̀ω•́ )ゝ 1.队列在c语言中的语法? No.1…
洛谷题目传送门 闲话 看完洛谷larryzhong巨佬的题解,蒟蒻一脸懵逼 如果哪年NOI(放心我这样的蒟蒻是去不了的)又来个决策单调性优化DP,那蒟蒻是不是会看都看不出来直接爆\(0\)?! 还是要想点办法,不失一般性也能快捷地判定决策单调. 对于判定决策单调的分析 再补一句决策单调性的概念:状态转移方程形如\(f_i=\min/\max_{j=1}^{i-1} g_j+w_{i,j}\),且记\(f_i\)的最优决策点为\(p_i\)(也就是\(f_i\)从\(g_{p_i}+w_{i,p_…
洛谷题目传送门 用两种不一样的思路立体地理解斜率优化,你值得拥有. 题意分析 既然所有的土地都要买,那么我们可以考虑到,如果一块土地的宽和高(其实是蒟蒻把长方形立在了平面上)都比另一块要小,那么肯定是直接并购,这一块对答案没有任何贡献. 我们先把这些给去掉,具体做法可以是,按高为第一关键字,宽为第二关键字从大到小排序,然后上双指针扫一遍. 于是,剩下的就是一个高度递减.宽度递增的矩形序列.考虑怎样制定它们的并购方案会最优.显然如果要并购,一定要挑序列中的一段区间,这样贡献答案的就只有最左边矩形的…
洛谷题目传送门 疯狂%%%几个月前就秒了此题的Tyher巨佬 借着这题总结一下决策单调性优化DP吧.蒟蒻觉得用数形结合的思想能够轻松地理解它. 首先,题目要我们求所有的\(p_i\),那么把式子变一下 \[p_i\ge a_j-a_i+\sqrt{|i-j|}\] \[p_i=\max\limits_{j=1}^n\{a_j+\sqrt{|i-j|}\}-a_i\] 绝对值看着很不爽,我们把它拆开 \[p_i=\max(\max_{j=1}^i\{a_j+\sqrt{i-j}\},\max_{j…
题目链接 洛谷 COGS.24 对于大的矩阵可以枚举:对于小的矩阵,需要在满足条件的区域求一个矩形和的最小值 预处理S2[i][j]表示以(i,j)为右下角的C\(*\)D的矩阵和, 然后对于求矩形区域的最小值,可以先将每行看做一个数列,对于每个点y,得到一个[y-(B-3),y]的最小值 处理完行后得到Minr[][],对每列的进行同样的操作,就可以得到Min[x][y]表示([x-A+3,x],[y-B+3,y])的最小矩形和 但是注意单调队列处理的是S2,S2表示的是C\(*\)D的和,n…
Description 本题中,我们将用符号[c]表示对c向下取整,例如:[3.0」= [3.1」=[3.9」=3.蛐蛐国最近蚯蚓成灾了!隔壁跳 蚤国的跳蚤也拿蚯蚓们没办法,蛐蛐国王只好去请神刀手来帮他们消灭蚯蚓.蛐蛐国里现在共有n只蚯蚓(n为正整 数).每只蚯蚓拥有长度,我们设第i只蚯蚓的长度为a_i(i=1,2,...,n),并保证所有的长度都是非负整数(即:可 能存在长度为0的蚯蚓).每一秒,神刀手会在所有的蚯蚓中,准确地找到最长的那一只(如有多个则任选一个) 将其切成两半.神刀手切开蚯蚓…
“卡常技术哪家强,中国OJ找洛谷” 去掉两个语句之后...95-->100 题目大意就不说了QWQ 首先65分裸优先队列,线段树,堆都可以... 100分:开三个队列,第一个存没被砍过的蚯蚓(要先sort),第二个存被砍了长度*p的蚯蚓,第三个存被砍了长度*(1-p)的蚯蚓.每次都从三个队列的队头找一个最大的砍掉,然后分到第二个和第三个队列中. 怎么证明这样可以呢?其他博客有了详细的数学证明,但是我的思路很简单哇...假如某只蚯蚓x先被砍了,分成了两段,两段每秒都+q,等同于这只蚯蚓x每秒+2q…
洛谷P2216 )逼着自己写DP 题意: 给定一个带有数字的矩阵,找出一个大小为n*n的矩阵,这个矩阵中最大值减最小值最小. 思路: 先处理出每一行每个格子到前面n个格子中的最大值和最小值.然后对每一列求出长度为n的前面算出来的最大值的最大值,前面算出来的最小值的最小值.如果直接做是n的三次方,但是用单调队列优化后就是n方的. #include <algorithm> #include <iterator> #include <iostream> #include &l…
传送门 思路: 最朴素的dp式子很好考虑:设\(dp(i,j)\)表示前\(i\)个任务,共\(j\)批的最小代价. 那么转移方程就有: \[ dp(i,j)=min\{dp(k,j-1)+(sumT_i+S*j)*(sumC_i-sumC_k)\} \] 为什么有个\(S*j\)呢,因为前面的批次启动会对后面的答案有影响. 但是分析复杂度是\(O(n^3)\)的,肯定不行. 考虑一下为什么需要第二个状态呢?是为了消除后效性,因为后面的状态不知道总共启动了几次. 但我们可以把费用提前计算,一次启…
洛谷P2216 理想的正方形 题目链接 思路: 直接暴力显然不可行,可以发现每一个矩形向右边扩展时是一列一列增加,于是可以想到单调队列,用数组来维护当前每列的最大值.因为行也有限制,所以还要用一个单调队列来维护行的信息. 做法大概就是每次扩展一行,然后求出每一列当前的最大值,之后再一列一列来搞. 详见代码吧: #include <bits/stdc++.h> using namespace std; typedef long long ll; const int N = 1005, M = 1…
没想到啊没想到,时隔两个月,我单调队列又懵了…… 调了一个小时,最后错在快读,啊!!!!(不过洛谷讨论真好啊,感谢大佬!) 考前就不推新东西了,好好写写那些学过的东西 题目点这里(我就不粘了自己点一下看吧) 这题还有其他奇奇怪怪的做法,比如你可以当做RMQ,用线段树啊ST表啊随便你,不过单调队列就可以了 单调队列说到底就是个数据结构,就是维护数据的. 以当前这道题为例: 它维护的队列一定满足单调性,单调递增或递减,或者自定义一个单调性. 如何维护呢,假设当前队尾为q [ tail ], 要插入元…
洛谷题面传送门 考虑一个平凡的 DP:我们设 \(dp_i\) 表示前 \(i\) 辆车一来一回所需的最小时间. 注意到我们每次肯定会让某一段连续的火车一趟过去又一趟回来,故转移可以枚举上一段结束位置,设为 \(j\),那么有转移 \[dp_i=\min\limits_{j}\{\max(dp_j+i-j-1,a_i)+2s+i-j-1\} \] 在这里我们不妨假设 \(a_i<a_{i+1}\),这个可以通过从左到右扫一遍并执行 \(a_i\leftarrow\max(a_{i-1}+1,a_…
洛谷题目传送门 DP题怕是都要大大的脑洞...... 首先,时间那么大没用,直接离散化. 第一问还好.根据题意容易发现,当一堆活动的时间有大量重叠的时候,更好的办法是把它们全部安排到一边去.那么我们转移的时候也肯定是要一块一块地转移啦. 设\(tot_{l,r}\)为完全被包含在\(l-r\)时间内活动总数,直接\(O(n^3)\)暴力求就好了. 设\(pre_{i,j}\)为时间\(1-i\)内一边选\(j\)个时,另一边能选的最大值.枚举一块转移的话,我们的方程应该写成这样: \[pre_…
标题很长emmm…… [USACO2008 NOV]toy 玩具 https://www.luogu.org/problemnew/show/P2917 https://www.lydsy.com/JudgeOnline/problem.php?id=1229 [BJWC2018]餐巾计划问题 https://www.luogu.org/problemnew/show/P4480 其中[BJWC2018]餐巾计划问题的数据范围更大,且数据强度可能更强,因此下文围绕该问题展开. 一个餐厅在相继的n…
洛谷 题目描述 一个学校里老师要将班上N个同学排成一列,同学被编号为1-N,他采取如下的方法: 1.先将1号同学安排进队列,这时队列中只有他一个人: 2.2-N号同学依次入列,编号为i的同学入列方式为:老师指定编号为i的同学站在编号为1-i -1中某位同学(即之前已经入列的同学)的左边或右边: 3.从队列中去掉M(M<N)个同学,其他同学位置顺序不变. 在所有同学按照上述方法队列排列完毕后,老师想知道从左到右所有同学的编号. 输入输出格式 输入格式: 输入文件arrange.in的第1行为一个正…