Loading

贪心

CF1430D String Deletion
先把字符串变成一个一个的块,然后贪心,如果能在里面删这个块的大小 \(> 1\) 或后面有块大小 \(> 1\) 那么就删,否则就删两个块(两个数)。

P6187 [NOI Online #1 提高组]最小环
显然最后是由 \(\gcd(k, n)\) 个环组成的,然后每个环上的差越小越优,因此按照从大到小排序即可。
然后对于每一个环上考虑,就是直接取两边最大的数,让这个数与他相邻即可。(从大到小考虑)

CF77C Beavermuncher-0xFF
首先处理 \(dp_i\) 表示从 \(i\) 点出发向下走,能得到的最大值。
只要让每次选择的子树的的值最大 (对子树的 \(dp\) 值排序) ,然后如果有多余的选择就让他们继续 "配对" 即可。

CF1430F Realistic Gameplay
对于 \(l_{i+1} = r_i\) 的问题,我们要贪心让 \(i+1\)\(l_{i+1}\) 的时候打的子弹数尽可能少。因此进行 \(dp\), 倒着扫一遍,维护 \(i\)\(l_{i}\) 最少要打多少子弹。

CF865D Buy Low Sell High
首先先把所有数都丢进优先队列里,然后每次取出优先队列中的最小值然后就是 "买下这个最小值","卖掉现在的数"。

CF436E Cardboard Box
考虑每次取期望能得到最小的(如果每次把 \(a_i\) 丢进去,取出 \(a_i\) 时把 \(b_i - a_i\) 丢进去是错的)。可以开两个堆,一个记录一个一个取的,一个记录两个两个取的。

AT2044 [AGC004D] Teleporter
显然可以把问题转化为给定一颗树,每一次可以断掉一些边。然后除了结点 \(1\) 所在的树深度 \(\le K\) 外,其他子树深度都要求 \(\le K - 1\)
考虑从下往上做,遇到不行的就断边即可。

CF521D Shop
显然先赋值,再加价值,再做乘法。赋值只可能是赋为最大值,可以转化为加法;加法对于一个数来说只有可能是从大往小加,也可以看做乘法。
因此所有操作都是乘法,排个序就好了。

CF893D Credit Card
这题可以贪心地做,记录一个距离上次可以修改的 \(max\) 值,遇到 \(0\) 如果小于 \(0\)对于 \(max\) 的大小判一下无解。

UVA1205 Color a Tree
考虑维护一个堆,堆里面放着一堆连通块。每次找出 \(\frac{val_x}{siz_x}\) 最大的连通块,把他父亲和他进行合并。(走完父亲所属的连通块就来走这个连通块)
这样子保证了权值大的连通块先走,交换顺序不会更优,因此是正确的。

posted @ 2020-10-14 19:46  zhoukangyang  阅读(50)  评论(0)    收藏  举报