随笔分类 -  基本算法--贪心

摘要:ST表 好久没写了, 所以写篇博客来回忆一下 用于解决RMQ问题 主要运用倍增的思想 具体做法: 1. 设f[i][j]为 \([i,i+2^j]\) 区间内的极值, 然后预处理 2. 查询时: 设查询区间长度为len,返回左端点为起点长度为$ 2^{log_2(len)} $ 与右端点为终点同等长 阅读全文
posted @ 2021-05-18 22:16 yzhx 阅读(86) 评论(0) 推荐(2)
摘要:题面概括 将n个数两两相加得到n*(n-1)/2个和,给出这些和,求所有原数方案 n<=500 LuoguP1286 题解 此题原题是 n<10, 没啥可做的 先将 \(n*(n-1)/2\) 个数排序 设b[i]表示给定的数中第i小的, a[i]为原数第i小的 显然有: b[1]=a[1]+a[2 阅读全文
posted @ 2020-10-17 11:58 yzhx 阅读(341) 评论(5) 推荐(1)
摘要:题面 测试要求 Bob 尽可能快地切断 n 根绳子。 所有绳子的端点两两不同,所以共有 2n 个端点。这些端点被捆在一个圆上,等距离分布。我们把这些端点按顺时针方向编号为 1 到 2n。 Bob 每次切割的轨迹是一条直线,可以将所有与这条直线相交的绳子切断,他想知道至少多少次可以切断所有的绳子。 \ 阅读全文
posted @ 2020-04-17 23:43 yzhx 阅读(441) 评论(0) 推荐(3)
摘要:题面 现有两个厕所,一个女士专用,一个通用,给出$2 n$个排成一列的人的性别 每人如厕需要一分钟,假如女厕是空的,女生中最靠前的可以直接进入。 需要通过调换顺序使得所有人都上完厕所最后的时间为n分钟 要求最小化队伍中更改位置的最远距离 "题目范围戳这里" 题解 考虑不合法的情况: 一定是当前状态下 阅读全文
posted @ 2020-04-17 23:22 yzhx 阅读(252) 评论(0) 推荐(2)
摘要:题面 给定 n 个节点的有根树,根是 1 号节点。 你可以选择 k 个节点将其设置为工业城市,其余设置为旅游城市。 对于一个工业城市,定义它的幸福值为工业城市到根的路径经过的旅游城市的数量。 你需要求出所有工业城市的幸福值之和的最大可能值。 $1 using namespace std; defin 阅读全文
posted @ 2020-04-17 22:52 yzhx 阅读(185) 评论(0) 推荐(2)
摘要:题面 n个区间和数轴上的m个关键点 (0 using namespace std; define re register define ll long long define in inline define get getchar() in int read() { int t=0,x=1; ch 阅读全文
posted @ 2020-04-17 22:30 yzhx 阅读(166) 评论(0) 推荐(2)
摘要:题目大意 "传送门" (yzhx在写这篇题解的时候bzoj崩了,只能挂这个了) 给定一颗 n 个点的树,节点间距离为1, 求最少链覆盖,以及使在最少链覆盖的前提下最长链最短 题解 先求第一问: 根据贪心的思想考虑每一个非树根节点, 显然它可以选择一条 连向儿子的边 归为 连向父亲的边 所在的那条链 阅读全文
posted @ 2019-10-25 15:32 yzhx 阅读(149) 评论(2) 推荐(1)
摘要:题意简化 "传送门" 有两座监狱,n个罪犯,给定m组罪犯之间的关系,若此二人在同一监狱则会产生摩擦 求最小化最大的摩擦 $ n using namespace std; int n,m,en[20001],fa[20001]; struct pig{ int x,y,w; }a[100001]; i 阅读全文
posted @ 2019-05-03 09:03 yzhx 阅读(291) 评论(0) 推荐(1)
摘要:tags: 贪心 date: 2019 4 4 jag2017autumnJ Farm Village 题面 "题目链接" 翻译 数轴上有 n 个村庄,每个村庄可以生产两个单位的粮食。在每个村庄生产一单位粮食有一定的代价。运输粮食的代价就是运输的距离。求最小代价使得每个村庄都有 一个单位的粮食。 题 阅读全文
posted @ 2019-04-04 21:23 yzhx 阅读(217) 评论(0) 推荐(2)
摘要:题解 "传送门" ~~按照套路~~ 先把区间按左端点排序 然后再来思考怎么使最小值最大??? . . . 想到了啥??? 二分答案!!! 所以思路就很清晰了 先二分答案 对于每个二分出来的值去check: 1.扫一遍点 2.对于达不到这个值的每个点,把区间按右端点从大到小依次加上,知道该点的值满足条 阅读全文
posted @ 2019-04-04 17:21 yzhx 阅读(126) 评论(1) 推荐(2)
摘要:题解 传送门 对于每个小矮人,一旦他出去浪,就再也回不来了 所以肯定要让不容易出去的,先出去浪 关爱老幼病残孕及带小孩的乘客 所以我们按小矮人的身高+手长排遍序 因为长得高的贡献可能更大 而手长的更容易出去 . . . 排完序后 直接跑遍背包,求出走掉i个小矮人所剩余的最大高度 代码 #includ 阅读全文
posted @ 2019-04-04 17:04 yzhx 阅读(141) 评论(0) 推荐(1)
摘要:题解 "传送门" 既然题目要求的是差值 所以对于减数和被减数同时加上一个相同的数是毫无影响的 (详情参考人教版六年级上册数学教材) 所以不妨把边权分成两半 分别加给两个顶点 然后,直接每次选最大的点就好了 代码 cpp include using namespace std; define re r 阅读全文
posted @ 2019-04-04 16:33 yzhx 阅读(100) 评论(0) 推荐(1)
摘要:题解 "传送门" 其实只要找差距最大的逆序对就好了 答案就是此逆序对的差 /2 代码 (代码很短) cpp include using namespace std; define re register define ll long long define get getchar() define 阅读全文
posted @ 2019-04-04 16:00 yzhx 阅读(109) 评论(0) 推荐(1)
摘要:"传送门" 题解 既然是选取区间,没说顺序 肯定先排遍序 ~~都是套路~~ 那么按什么排序呢??? 为了方便处理 我们把区间按左端点从小到大排序 把关键点也按从小到大排序 假设当扫到 $i$ 点时,i 点之前的点都已处理完毕 (已达上限,或是覆盖了的区间全部取了) 既然要选的区间多 所以需要选的区间 阅读全文
posted @ 2019-04-04 15:45 yzhx 阅读(142) 评论(0) 推荐(1)