优先队列(堆)
优先队列
ModestCoder_
一个modest的coder
展开
-
【题解】LuoGu2048:[NOI2010]超级钢琴
原题传送门这道题目的id昭示着它的非同凡响我可以把这题和别的几题结合起来,产生一种利用堆的节点最优思想序列合并最小函数值以上是两道和这题有共同思想的本题是要求出前kkk大的sumj−sumi−1sum_j-sum_{i-1}sumj−sumi−1的和对于每个节点iii,首先寻出[i+l−1,i+r−1][i+l-1,i+r-1][i+l−1,i+r−1]区间内的pospospos,使得sumpos−sumi−1>=sumj−sumi−1(i+l−1<=j<=i+r−1)s原创 2020-08-30 18:58:21 · 181 阅读 · 0 评论 -
【题解】LuoGu2278:[HNOI2003]操作系统
原题传送门用堆模拟操作系统即可Code:#include <bits/stdc++.h>#define maxn 1000010using namespace std;struct heap{ int id, st, t, level; bool operator < (const heap &x) const { return x.level == level ? x.st < st : x.level > level; }};priority_q原创 2020-08-21 15:27:41 · 184 阅读 · 0 评论 -
【题解】LuoGu2085:最小函数值
原题传送门做法跟这道题目差不多Code:#include <bits/stdc++.h>#define maxn 10010using namespace std;struct heap{ int x, val; bool operator < (const heap &x) const{ return x.val < val; }};priority_queue <heap> q;int n, m, a[maxn], b[maxn], c[原创 2020-08-18 16:10:55 · 189 阅读 · 0 评论 -
【题解】LuoGu1631:序列合并
原题传送门a1+b1<=a1+b2<=...<=a1+bna_1+b_1<=a_1+b_2<=...<=a_1+b_na1+b1<=a1+b2<=...<=a1+bna2+b1<=a2+b2<=...<=a2+bna_2+b_1<=a_2+b_2<=...<=a_2+b_na2+b1<=a2+b2<=...<=a2+bn…an+b1<=an+b2<=...原创 2020-08-18 16:00:11 · 164 阅读 · 0 评论 -
【题解】LuoGu3620: [APIO/CTSC 2007]数据备份
原题传送门首先转化题意,可以用贪心策略证明肯定是相邻的两个点建立电缆然后把问题转化成ai=si+1−sia_i=s_{i+1}-s_iai=si+1−si,a1,a2,...,an−1a_1,a_2,...,a_{n-1}a1,a2,...,an−1中取kkk个不相邻的数使得和最小首先非常明显的O(nk)naiveDPO(nk)\text{naiveDP}O(nk)naiveDP...原创 2019-12-17 19:39:58 · 744 阅读 · 0 评论 -
【题解】codeforces725D Contest Balloons
One tradition of ACM-ICPC contests is that a team gets a balloon for every solved problem. We assume that the submission time doesn’t matter and teams are sorted only by the number of balloons they ha...原创 2018-08-05 09:36:27 · 356 阅读 · 0 评论 -
【题解】LuoGu5290:[十二省联考2019]春节十二响
原题传送门诶呀,这种题目比ZJOI可做多了首先,可以发现此题要我们干的事情:一些互不相干的点,怎么组合,使得代价最小?一般题目的子任务都是与正解有关的,此题亦是如此。先考虑一条链的情况,因为题目指定1为根节点,但1可能有两个子节点,1下面的两条链怎么组合使得代价最小呢?对于一条链代价最大的那个点,肯定与另一条链代价最大的那个点组合;第二大的和第二大的组合……毫无疑问吧,所以对于一条链的情况...原创 2019-04-14 10:12:34 · 243 阅读 · 0 评论 -
【题解】LuoGu4597:序列sequence
原题传送门先放这道题的cf原题若N<=5000显然用O(n2)O(n^2)O(n2)的DP解决首先明确:改变序列中某个数个值,一定是把它变成原序列中出现过的数原数组a复制一份到b,排个序令dp[i][j]表示到a[i]为止,以b[j]结尾的最小代价转移方程:dp[i][j]=min(dp[i][j−1],dp[i−1][j]+abs(a[i]−b[j]))dp[i][j]=mi...原创 2019-07-06 16:17:58 · 681 阅读 · 0 评论