Patrickpwq的贪心专练
收集各种贪心算法的题目
Patrickpwq
这个作者很懒,什么都没留下…
展开
-
【ZJOI2005】午餐(贪心辅助dp)
容易想到贪心:吃饭慢的先打饭节约时间, 所以先将人按吃饭时间从大到小排序。是可以证明无论怎么交换,都没有这样选优的。在这里由于我太菜了,就不写证明了我们设dp[i][j]表示前i个人 在1号窗口打饭总时间为j 最早吃饭完的时间 那也就顺便可以推出在二号窗口的打饭总时间了影响到当前dp[i][j]的:1~i-1最早吃完饭的时间和第i个人打完饭+吃饭的时间 很显...原创 2018-10-23 23:36:00 · 163 阅读 · 0 评论 -
【BZOJ1106】【POI2007】立方体大作战tet(树状数组+贪心)
贪心策略:每加入一个数,如果之前已经存在它了,就直接交换因此我们需要维护距离 就用树状数组好了注意是2n#include<bits/stdc++.h>#define N 100005using namespace std;int n,tree[N],pre[N],ans;inline int lowbit(int x){ ret...原创 2018-10-25 22:15:00 · 146 阅读 · 0 评论 -
【CF402D】Upgrading Array(素数+质因数+gcd+贪心)
不难发现 题目中给出的f函数 其实就是一个数分解质因数后好素数和坏素数的个数之差也就是说 数x带来的贡献 与x的质因数的种类有关系 又联想到gcd[1~x]一定是这个数的因子 也就是说一个数的贡献可以表示成:f(gcd[1~x])+f(....)容易想到贪心做法:我们从后往前枚举 如果当前gcd前缀带来的贡献<0 就除一下另外有几个小细节我平时没有注意...原创 2018-10-27 21:49:00 · 208 阅读 · 0 评论 -
【BZOJ 2151】种树(链表+贪心)
有一种显然错误的做法:每次从堆里取最大的,更新链表比如 19,20,19 这样的话会先选20。但是很显然,选两个19带来的贡献可能是更好的这时我们就要想一种能做到“反悔”的方法其实只需要做一点点修改,每次再push一个“19+19-20”进去,一样是对的那这个“19+19-20”的放在哪儿呢(编号)?只需要放在20的位置就行了,这样是正确的其实这样做的本...原创 2018-10-28 17:07:00 · 126 阅读 · 0 评论 -
【BZOJ 2600】【IOI 2011】ricehub(贪心+中位数)
拿到这道题一开始有两个naive的想法想法1:对于每个位置 向右扩展 直到不能取了为之 但是又觉得复杂度不对就放弃了......想法2:离散化坐标 二分仓库的位置 每次往左右两边数量较多的一边靠(这是什么口胡玩意儿???)正解:事实证明我是被ioi2011吓到了其实就是想法1加了一丢丢东西 维护一个左指针 右指针 假设是[l,r]区间 那么仓库放的位置最...原创 2018-10-28 22:39:00 · 159 阅读 · 0 评论 -
【BZOJ 3613】【Heoi2014】南园满地堆轻絮(贪心结论题)
一开始在往平均数那方面想 但是好像是错的我们这样想 每当加入一个数 如果他与之前构成的是上升的就不管 如果是下降的 那肯定要折中 变成中间值才能最小即答案就是最大的逆序对差值/2#include<bits/stdc++.h>#define ll long long#define N 5000000using namespace std;i...原创 2018-10-29 10:42:00 · 149 阅读 · 0 评论