BZOJ 1572 贪心(priority_queue)】的更多相关文章

思路: 维护两个堆 一个按时间 (从后到前)的 另一个是按价值(从大到小)的 从时间的堆向价值的堆倒 每回(合法状态下)取当前的堆顶 判一判 //By SiriusRen #include <queue> #include <cstdio> #include <algorithm> using namespace std; long long ans; int n,t=1000000000; struct Node{int d,p;}node[100500]; stru…
贪心... 按截止时间排序 , 然后从小到大考虑 . 假设当前考虑第 i 个任务 , 若目前已选工作数 < D_i , 那就选 i ; 否则 若已选工作中利润最小的比 P_i 小 , 那就去除它 , 并选择 i . 可以用heap ( priority_queue ) 维护 -------------------------------------------------------------------------- #include<cstdio> #include<algo…
1572: [Usaco2009 Open]工作安排Job Description Farmer John 有太多的工作要做啊!!!!!!!!为了让农场高效运转,他必须靠他的工作赚钱,每项工作花一个单位时间. 他的工作日从0时刻开始,有1000000000个单位时间(!).在任一时刻,他都可以选择编号1~N的N(1 <= N <= 100000)项工作中的任意一项工作来完成. 因为他在每个单位时间里只能做一个工作,而每项工作又有一个截止日期,所以他很难有时间完成所有N个工作,虽然还是有可能.…
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1572 题意: 有n个工作,每个工作有一个截止日期dead[i]和收益pay[i]. 完成一项工作需要花费1的时间. 问你最大收益. 题解: 贪心. 先将n个工作按dead从小到大排序. 开一个优先队列q(升序),保存当前选了的工作的pay. 枚举每个工作i: (1)如果当前q中的工作数 < pay[i],说明在pay[i]及之前的时间还有没用的.所以直接选这个工作. (2)如果当前q中的…
先按照时间顺序加,价值塞进小根堆里,碰到不合法情况就从堆里减去 #include<iostream> #include<cstdio> #include<queue> #include<algorithm> using namespace std; const int N=100005; int n,now; priority_queue<long long>q; struct use { int t; long long v; }a[N]; b…
Description Farmer John想修理牧场栅栏的某些小段.为此,他需要N(1<=N<=20,000)块特定长度的木板,第i块木板的长度为Li(1<=Li<=50,000).然后,FJ去买了一块很长的木板,它的长度正好等于所有需要的木板的长度和.接下来的工作,当然是把它锯成需要的长度.FJ忽略所有切割时的损失——你也应当忽略它. FJ郁闷地发现,他并没有锯子来把这块长木板锯开.于是他把这块长木板带到了Farmer Don的农场,想向FD借用锯子. 作为一个有商业头脑的资…
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1572 [算法] 贪心 先将这些工作按截至时间排序 建立一个小根堆,当决策是否完成一项工作时,若堆的大小小于该工作的截止时间,则将这项工作所获得的利润放入堆,否则,将这项工作的利润与堆顶比较,如果比堆顶大,则将堆顶弹出,将这项工作的利润放入堆中 [代码] #include<bits/stdc++.h> using namespace std; #define MAXN 100010…
贪心的一种,维护一种尽可能优的状态(即不会比最优解差),将这种状态保持到最后. /************************************************************** Problem: 1029 User: idy002 Language: C++ Result: Accepted Time:400 ms Memory:2368 kb *************************************************************…
题意: 思路: 贪心 能不覆盖的就不盖 写得很乱 左闭右开的 temp //By SiriusRen #include <queue> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; int n,l,temp,ans; struct Node{int from,to;}node[10050]; priority_queue<Node>pq…
题面 若一个大于 11 的整数 M的质因数分解有 k 项,其最大的质因子为 \(a_k\),并且满足 \({a_k}^k \leq N,k<128\),我们就称整数 M 为 N-伪光滑数. 现在给出 N*N,求所有整数中,第 K大的 N-伪光滑数. 分析 先筛出128以内的所有质数 根据题意贪心考虑,显然M的质因数分解中最大的质数越大越好 于是我们把每个质数p的1次方,2次方,3次方...k次方(\(p^k \leq n\))加入堆(堆顶元素最大). 然后取k-1次,每次对于取出来的数x,除掉它…