贪心
取竹
Hai capito?
展开
-
[bzoj] 1029 [JSOI2007]建筑抢修
此题我们考虑贪心,以完成时间为关键字排序,但是直接做会错,所以我们考虑如何节省时间。 可以想到每次替换花费时间最大的建筑,就可以保证最优性。然后维护一个大根堆,以花费时间为关键字。 每次无法添加时就把当前的与top进行比较,可以节省时间就替换。 #include #include #include #define mk make_pair using namespace原创 2017-04-18 17:38:42 · 423 阅读 · 0 评论 -
BZOJ 1150 数据备份Backup
算是套路的贪心,因为给出数据是有序的,先将相邻的搞成线段存进堆里,每次取出一个最小的值,加到总值中,并改变左右的链表值,并将左右线段值存入当前位置作为撤销操作。#include <cstdio> #include <algorithm> #include <queue> #define mk(a,b) make_pair(a,b) using namespace std; const int in原创 2017-09-12 20:35:13 · 293 阅读 · 0 评论 -
51Nod 1241 特殊的排序
因为可以把一个数向最前面移或者是最后面移,即把不符合排序的那些数拿走,所以求的就是n-最长递增序列的长度。 #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int N = 5e4 + 5; int a[N],pre[N]; int main() { int n;原创 2017-09-11 20:53:29 · 239 阅读 · 0 评论 -
51Nod 1125 交换机器的最小代价
把所有的点分成一个个的置换的循环,对于每一个循环用循环中的最小的数进行置换,但这可能不是最优的。要考虑用循环外的最小数与环内最小数交换后再进行操作,把这两种都跑一遍,取最小值。#include<iostream> #include<algorithm> #include<cstdio> using namespace std; struct jq{ long long num; lo原创 2017-09-11 21:13:51 · 209 阅读 · 0 评论 -
51Nod 1052 最大M子段和
先将同符号的每一段存下来,并记录前后段标号,将正数段总和记录为tot 开一个最小堆存每一段的abs值。 每次从堆中取出一个x 去掉这一段,并将左右的段与之合并再存入堆中,作为撤销或更改操作。 每次操作都会减少一段,直到段数=k就退出。#include<cstdio> #include<cstdlib> #include<cmath> #include<algorithm> #d原创 2017-09-11 21:27:32 · 239 阅读 · 0 评论 -
Codeforces 725D Contest Balloons
首先将每个队伍按照气球量从大到小排序,将大于XXX的队伍压入队列,在队列中按照 体重-气球量+1 从小到大排序。 当XXX的气球减少时,就需要把之前没进入队列但此时气球量大于XXX的队伍压入队列,不断更新最小ans。#include <cstdio> #include <cstdlib> #include <algorithm> #include <queue> #define ll long lo原创 2017-09-11 21:34:21 · 232 阅读 · 0 评论 -
CodeChef PROTEPOI Protecting The Poison
orz zzk sunboy 因为蛇是水平或竖直的,不可能同时挡住水平面上的箭和竖直面上的箭。 所以我们可以把二维平面上的问题变成一维线段覆盖问题。 线段覆盖问题我们有贪心的策略:假设目前最远覆盖到 now ,那么所有能够接下去覆盖的线段 {[L,R]|L≤now+1} 中,我们肯定选右端点最大的,这个很显然。不停选择右端点最大的线段更新 now ,最后就可以得到最优解了。 #include<原创 2017-09-11 21:36:54 · 219 阅读 · 0 评论 -
BZOJ 2006超级钢琴
http://blog.csdn.net/zzkksunboy/article/details/76927058 写的很详细了,其实是一种贪心模板#include <cstdio> #include <queue> #include <algorithm> #define mk(A,B,C,D) make_pair(make_pair(A,B),make_pair(C,D)) using name原创 2017-09-11 21:39:59 · 255 阅读 · 0 评论 -
bzoj 2667 [cqoi2012]模拟工厂
bzoj 2667: [cqoi2012]模拟工厂由于n≤15,爆枚接受哪些订单 每次Check的时候,对于每段时间显然先提高生产力再生产产品 那么我可以考虑这一段内先尽量提高生产力 但是这样可能会导致生产力提高得太高而没有足够的时间生产产品使得某个订单失败 因此我们计算出对于后面的每一个订单,最多花多少时间提高生产力可以满足如果用接下来的时间都生产的话不至于fail 由于产品数量是原创 2017-12-05 21:16:34 · 222 阅读 · 0 评论