一般贪心
ZigZagK
一个蒟蒻。
展开
-
【贪心+堆】BZOJ1029(JSOI2007)[建筑抢修]题解
BZOJ1029题解。原创 2017-06-17 16:32:26 · 974 阅读 · 2 评论 -
【贪心】2017.10.2杂题[找零]题解
题目概述有 nn 种面值的硬币,第 ii 种为 aia_i 。求最少的硬币数使得选择的硬币可以组成 [0,x][0,x] 内任何整数。找零神奇的贪心题……先对 {an}\{a_n\} 进行排序,如果 a1>1a_1>1 说明一定不可行,输出 −1-1 。然后根据贪心我们肯定想尽量用大的,但是不能直接用,因为我们需要保证 [0,x][0,x] 都可以被组成。那么一步一步来,对于 ii ,我们先保证 [原创 2017-10-02 22:24:38 · 343 阅读 · 0 评论 -
【贪心+堆】Codeforces725D[Contest Balloons]题解
题目概述有 nn 个队伍,第 ii 个队伍有 tit_i 个气球,重量为 wiw_i ,其中第 11 个队伍是你所在的队伍。你可以给别的队伍任意数量的气球(不超过你的气球数),如果一个队伍的气球数 >> 重量,这个队伍就会飞起来(滑稽)并失去比赛资格。求你的队伍能达到的最小名次是多少(按气球数排名)。解题报告这是一道挺简单的贪心题。我们肯定要选气球数多于我们的队伍弄飞,且在这些队伍中选需要气球数少的原创 2017-08-10 20:40:53 · 381 阅读 · 0 评论 -
【贪心+堆】AtCoder Grand Contest(018)C[Coins]题解
题目概述有 X+Y+ZX+Y+Z 个人,每个人有 AiA_i 个金币, BiB_i 个银币, CiC_i 个铜币。现在选 XX 个人提供金币, YY 个人提供银币, ZZ 个人提供铜币。求最多提供多少币(金银铜)。解题报告挺好的题目,可以完美地干翻像我这样的蒟蒻。我们先考虑只有金币和银币的最优策略:按照 Bi−AiB_i-A_i 从小到大排序,然后前 XX 个取 AA ,后 YY 个取 BB 。如果原创 2017-10-19 16:43:22 · 406 阅读 · 0 评论 -
【剩余类+贪心+DP】Codeforces571B[Minimization]题解
题目概述给出 nn 个数和 KK ,现在需要将 nn 个数组成序列,求 ∑n−Ki=1|Ai−Ai+K|\sum_{i=1}^{n-K}|A_i-A_{i+K}| 的最小值。解题报告+K+K ……想到剩余类,这样的话 nn 个数就只有 KK 个剩余类。同时观察到这些剩余类的个数只有 ⌊n−1k⌋\lfloor{n-1\over k}\rfloor 和 ⌊n−1k⌋+1\lfloor{n-1\over原创 2017-10-25 15:05:45 · 329 阅读 · 0 评论 -
【贪心+位运算】BZOJ3668(Noi2014)[起床困难综合症]题解
题目概述有 nn 扇防御门,每扇防御门包括一个位运算 opop 和一个参数 tt ,参数一定为非负整数。如果还未通过防御门时攻击力为 xx ,则其通过这扇防御门后攻击力将变为 x op tx\ op\ t 。最终的伤害为对方初始攻击力 xx 依次经过所有 nn 扇防御门后转变得到的攻击力。初始攻击力只能为 00 到 mm 之间的一个整数,求一次攻击最多有多少伤害。解题报告每个位分开考虑,得到第 ii原创 2017-12-05 18:23:02 · 362 阅读 · 0 评论 -
【Dijkstra+贪心】BZOJ1922(Sdoi2010)[大陆争霸]题解
题目概述有 nn 个点 mm 条有向边,一个点要被摧毁需要先摧毁其他的一些点,求从 11 开始,摧毁 nn 的最短时间。解题报告刚开始以为是拓扑,之后发现显然不是,因为一个点没被摧毁之前是不能访问的。所以SPFA也不能用了,只剩下Dijkstra。记录 dis[0][i]dis[0][i] 表示到 ii 点的最短时间, dis[1][i]dis[1][i] 表示 ii 可以被摧毁的最短时间。那么一个原创 2017-12-14 19:34:00 · 346 阅读 · 0 评论 -
【C数学题D贪心】Codeforces Round #461(Div.2)
Acopy一个源文件会新产生一个源文件和一个副本,copy一个副本会新产生两个副本,现在有一个源文件,问能否copy出 xxx 个副本和 yyy 个源文件?瞎搞,注意一些特殊情况。#include<cstdio>using namespace std;int x,y;int main(){ freopen("A.in","r",stdin); ...原创 2018-02-08 03:42:32 · 281 阅读 · 1 评论 -
【二分+贪心】BZOJ1052: [HAOI2007]覆盖问题
题目概述有 nnn 个点,用 333 块 L×LL×LL\times L 的布盖住所有点,求最小的 LLL 。解题报告这是道套路贪心假题……首先二分将求最优解问题转换为判定问题,然后我们找出盖住所有点的最小矩阵,则第一块布一定是盖在这个矩阵的四个角上。为什么?因为最边上的点一定要盖住的,那么莫不如就贴着最边上的点盖,套路的贪心想法……第二块布也这么盖,第三块布直接判断就行...原创 2018-02-18 16:13:24 · 558 阅读 · 0 评论 -
【置换群+贪心】51Nod1125[交换机器的最小代价]题解
题目概述有 nn 台重量不相同的机器,每次操作可以交换两台机器,代价是两个机器的重量之和,求使机器按照重量升序排列的最小代价。 解题报告对于一个位置 ii ,记录 ID[i]ID[i] 表示排序完毕后在位置 ii 上的数(也就是第 ii 小的数)原来在哪里,那么我们需要做的就是将位置 ii 上的数与位置 ID[i]ID[i] 上的数进行交换,使得最终在位置 ii 的数归位。我们会发现按照 i→ID[原创 2017-08-29 20:45:39 · 455 阅读 · 0 评论 -
【DP+树状数组 or 贪心】Codeforces527D[Clique Problem]题解
题目概述给出平面上 nn 个点 xix_i ,每个点有个权值 wi(wi>0)w_i(w_i>0) ,当 |xi−xj|≥wi+wj|x_i-x_j|\ge w_i+w_j 时 i→ji\to j 有条边。求最大团(最大完全子图)。解题报告先将点按照位置排序,然后会发现若 k<j<ik<j<i 且 kk 能到 jj , jj 能到 ii ,则 kk 一定能到 ii 。证明很简单:xj−xk≥wk+w原创 2017-10-18 10:53:04 · 307 阅读 · 0 评论 -
【贪心】51Nod1615[跳跃的杰克]题解
题目概述你刚开始在 00 ,第 ii 步可以向左或向右跳 ii ,求最少跳几步刚好跳到 xx 。解题报告刚开始的想法是先跳到最接近 xx ,然后一步一步迂回跳(一下往左一下往右)到 xx 。这显然是错的……我们看 88 :1+2+3+4=101+2+3+4=10−1+2+3+4=8-1+2+3+4=8所以我们可以通过改变前面某一步的方向使得跳过头的方案跳回 xx 。假设跳过头到了 XX ,那么只有当原创 2017-10-17 17:48:46 · 975 阅读 · 0 评论 -
【贪心】CodeChef(PROTEPOI)[Protecting The Poison]题解
题目概述有一个 len×lenlen\times len 的网格图,中央 k×kk\times k 的子网格存有毒药(可怕),小偷可以水平或竖直射箭偷走毒药(真奇葩)。有 nn 条水平或竖直的蛇,不管箭是射进来还是射出去都可以挡住箭(这题目越来越奇怪了),问最少多少只蛇能够防止小偷偷走毒药。解题报告因为蛇是水平或竖直的,不可能同时挡住水平面上的箭和竖直面上的箭。所以我们可以把二维平面上的问题变成一维原创 2017-08-12 22:37:09 · 342 阅读 · 0 评论 -
【贪心+堆+树状数组】JXOI2017[加法]题解
题目概述有一个序列 {an}\{a_n\} 和 mm 个线段,你可以选 kk 个线段,每个选择的线段 [l,r][l,r] 可以使 aa 中的 [l,r][l,r] 都加上 AA (给出),找出一个方案使得 aa 中最小值最大。解题报告由于是求最小值的最大值,所以我们想到二分答案 midmid ,这样我们就知道序列中每个数还需要加多少次才能 ≥\ge midmid ,设第 ii 个数的次数为 ti原创 2017-08-14 21:45:49 · 1272 阅读 · 0 评论 -
【贪心+DP】BZOJ1899(Zjoi2004)[Lunch 午餐]题解
BZOJ1899题解。原创 2017-05-22 21:37:25 · 1184 阅读 · 3 评论 -
【贪心】BZOJ3410(Usaco2009 Dec)[Selfish Grazing 自私的食草者]题解
题目概述有 nn 头奶牛,第 ii 头奶牛的吃草范围是 (li,ri)(l_i,r_i) ,任何两头奶牛的吃草范围没有交集才可以在一起吃草。问最多有多少奶牛可以一起吃草。解题报告前年我竟然做过这题!那时候的初始想法是DP,但是 nn 比较大所以TLE了。先排序,然后我们记录一个位置 lastlast 表示目前最后一头牛的 rr 。对于目前的牛 ii ,如果 li≥lastl_i\ge l原创 2017-08-15 21:11:21 · 691 阅读 · 0 评论 -
【贪心】51Nod1241[特殊的排序]题解
题目概述有一个 nn 的排列,一次操作可以将一个位置上的数放到头或尾,求最少操作使得排列有序。解题报告贪心的策略是尽量少改变相对位置,所以我们刷一下”最长升“,这里的最长升指的是形如 i,i+1,i+2,⋯,ji,i+1,i+2,\cdots,j 的最长子序列。假设最长升为 MAXMAX ,那么 n−MAXn-MAX 就是答案。严格证明?不会啊:P。ps:题目里没说升序还是降序,我都写了,但好像只写原创 2017-08-27 20:22:50 · 413 阅读 · 0 评论 -
【贪心+堆+链表】BZOJ1150(CTSC2007)[数据备份Backup]题解
题目概述有 nn 个在一条直线上的办公楼,距原点距离为 s[i]s[i] , 现在要建立 KK 个连接两个办公楼的网络电缆,每个电缆的代价为两个办公楼间的距离。每个办公楼不能被超过一条网络电缆连接,求最小代价。解题报告选相邻两个建肯定是最优秀的,比如:x==x==x==x那么贪心的想法就是用堆取出前 KK 个最短的线段,但是由于端点不能共用,所以每次取出最短的可能不如不取该线段,如:x==x==x=原创 2017-09-06 20:52:33 · 367 阅读 · 0 评论 -
【贪心+堆+链表】51Nod1053[最大M子段和 V2]题解
题目概述在 {An}\{A_n\} 中选至多 mm 个不相交的子段,求子段和的最大值。解题报告初始想法是DP,好像可以优化到 O(n2)O(n^2) ,但是对于 5000050000 的数据范围还是不行。把 00 无视掉,我们就可以把 {An}\{A_n\} 分为一系列正子段和负子段(正负交替),选走所有正段肯定是最优秀的,但是正段个数可能大于 mm ,所以我们要想办法使块数减少(定义 V(i)V(原创 2017-09-02 19:01:05 · 1112 阅读 · 0 评论 -
【二分+贪心】Codeforces830A[Office Keys]题解
题目概述有 nn 个人,位置在 aia_i , mm 把钥匙,位置在 bib_i 以及一扇门,位置在 pp ,一个人出门需要先拿钥匙再出门,时间为 |ai−bj|+|bj−p||a_i-b_j|+|b_j-p| 。同一时刻可以有任意个人出门,但是钥匙只能一个人使用,求最少时间。解题报告要求最大值最小,所以用二分枚举答案 midmid 。然后问题是怎么判断是否可行,由于是直线距离,根据贪心,我们将 a原创 2017-09-28 14:45:04 · 357 阅读 · 0 评论 -
【贪心+数学分析】51Nod1350[斐波那契表示]题解
题目概述每个数都可以用若干个斐波那契数组成,记录 F(x)=xF(x)=x 最少由多少个斐波那契数组成,求 G(n)=∑ni=1F(i)G(n)=\sum_{i=1}^{n}F(i) 。解题报告有个贪心: F(x)=F(x−fibmax)+1F(x)=F(x-fib_{max})+1 ,其中 fibmaxfib_{max} 是 ≤x\le x 的最大斐波那契数(并不会严格证明QAQ)。那么也就是说原创 2017-09-20 20:31:40 · 420 阅读 · 0 评论 -
【贪心】BZOJ1060(ZJOI2007)[时态同步]题解
题目概述有一棵有边权的有根树,现在从根开始传播JZ的神犇之力,经过一条边的时间是该边的边权。为了JZ神犇之力的平衡,要求神犇之力传播到所有叶子节点的时间相同。有一种操作是让某条边的边权增加 111 ,求最少的操作数使得神犇之力平衡。解题报告肯定是要把所有叶子节点的时间都变成最长时间叶子节点的时间,而且为了少花费,操作必然是越上面越好,所以只需要先DFS一遍记录一下 MAXiMAXi...原创 2018-02-19 23:37:57 · 438 阅读 · 0 评论