返回顶部

随笔分类 -  贪心

摘要:D. Assumption is All You Need 题意:给你两个长度为$n$的数组$A$和$B$,每次可以交换$A$中的逆序对,问你$A$能否通过操作得到$B$。 题解:从后往前遍历,贪心策略是,越大的数在越前面越好,首先$A_i$一定不大于$B_i$,不然gg,先确定$B_i$在$A$中 阅读全文
posted @ 2021-11-16 11:06 _Kolibri 阅读(558) 评论(0) 推荐(0)
摘要:题意:有一长度为$n$的序列,正向遍历,对于第$i$个元素,可以将其插入deque的队头或者队尾,问你最终得到deque后,逆序对最少是多少? 题解:假如将当前这个数插入队头,那么新增的逆序对就是$[2,len]$中小于$a[i]$的个数,插入队尾也是同理,结合逆序对的求法,我们可以用线段树分别求出 阅读全文
posted @ 2021-09-30 01:24 _Kolibri 阅读(71) 评论(0) 推荐(0)
摘要:题意:有$n$个人轮流上电梯,电梯送完一个人需要$1$个时刻.电梯有待机和运行两种状态,待机每时刻消耗$E_2$电量,运行每时刻消耗$E_1$电量,若电梯无人使用经过$k$个时刻后会变为待机状态,从待机状态变成运行状态需要消耗$E_3$电量,你可以自定义$k$的值,求出最后一个人走完后的最小消耗总电 阅读全文
posted @ 2021-06-01 01:51 _Kolibri 阅读(98) 评论(0) 推荐(0)
摘要:题意:有一颗树,你需要从根节点开始bfs,将搜到的点按顺序放入栈中,给你一个序列,你需要判断这个序列是否是某一种栈的情况. 题解:存一下序列中每个值的位置,然后对于每个父亲结点,按照所存每个值的位置对儿子进行排序,最后跑bfs判断即可. 代码: #include <bits/stdc++.h> #d 阅读全文
posted @ 2021-05-25 18:00 _Kolibri 阅读(45) 评论(0) 推荐(0)
摘要:题意:有$n$个数,选$k$个数使得它们的和最大,选完某个数后,其相邻两个数不能再选. 题解:将所有数放到大根堆里,用双向链表来存顺序关系,对于堆顶的$a_i$来说,我们如果选了它,$a_$和$a_{i+1}$就不能再选,但是$a_+a_{i+1}$可能比$a_i$大,我们先不管,先将$a_i$贡献 阅读全文
posted @ 2021-05-18 21:08 _Kolibri 阅读(108) 评论(0) 推荐(0)
摘要:题意:给你一个序列,有$q$个询问,每次询问一个区间$[l,r]\(,你要将这个区间内的数*最少*分成几个子序列,使得每个序列中的众数出现的次数不大于\)\lceil \frac{2}\rceil$($x$为子序列区间长度). 题解:假如区间内众数出现的次数$cnt<=\lceil \frac{2} 阅读全文
posted @ 2021-04-26 17:45 _Kolibri 阅读(51) 评论(0) 推荐(0)
摘要:题意:刚开始有一长度为$n$,空白的空数组,有$q$次询问,每次询问都会选一个区间$[l,r]$将其全部涂成颜色i,现在给你一个数组,问你能否得到所给的数组,$0$表示任何颜色都可以. 题解:首先这题有一个坑点,数组中必须要有颜色$q$,然后,易知两个相同颜色之间一定不能有比它小的颜色出现,那么对于 阅读全文
posted @ 2021-04-26 17:23 _Kolibri 阅读(52) 评论(0) 推荐(0)
摘要:题意:给你一组数,问你最少能凑多少个LIS和LDS. 题解:能解决的办法好像只有dfs找了,但是我们可以贪心和剪枝来优化,我们来看贪心,当我们遍历到$i$个数时,想要把它加入到前面的某个上升子序列中,那么最优的放法一定是放到末尾数字比$a[i]$小的最大的那个数后面,因为加入放到一个末尾数字很小的子 阅读全文
posted @ 2021-04-09 00:29 _Kolibri 阅读(47) 评论(0) 推荐(0)
摘要:题意:你要参加一场考试,考试持续时间为$T$,有两类题目简单题和难题,做一道简单题要花$a$分钟,难题要$b$分钟,每道题目都有一个强制时间$t_i$,当考试时间为$s$时,且$s\ge t_i$,假如你这时离开考试并且第$i$题没有写出来的话,你将得到$0$分,你可以在任意时刻离开考试,如果此时考 阅读全文
posted @ 2021-04-01 20:19 _Kolibri 阅读(58) 评论(0) 推荐(0)
摘要:题意:有$n$个物品,每个物品的价值是$a_i$,每个物品只有一个,假如你买了价值为$a_x$的物品,那么你可以选择$k$个价值不大于$a_x$的物品一块打包送给你,但是必须要$k$个才行,不能多不能少,你现在有$p$块钱,问你最多能买多少物品. 题解:先对物品排序,假如我们要买$x$个物品,不难发 阅读全文
posted @ 2021-04-01 20:04 _Kolibri 阅读(58) 评论(0) 推荐(0)
摘要:题意:有$n$个数,首先任选一个正整数$x$,然后在数组中找到两个和为$x$的数,然后去掉这两个数,$x$更新为两个数中较大的那个.问你最后时候能把所有数都去掉,如果能,输出最初的$x$和每次去除的两个数. 题解:首先现将数组排序,我们每次肯定都是要用数组中当前最大的数和其他数进行组合,这很容易证明 阅读全文
posted @ 2021-01-20 23:27 _Kolibri 阅读(190) 评论(0) 推荐(0)
摘要:题意:有三个背包,每个背包里都用一些数字,你可以选择某一个背包的数字$a$,从另外一个背包拿出$b$(拿出之后就没有了),然后将$a$替换为$a-b$,你可以进行任意次这样的操作,使得最后只剩下一个数,问这个数最大能是多少. 题解:我的思路是,先任意选两个背包,假设$x$和$y$,我们假设选$x$中 阅读全文
posted @ 2021-01-19 15:15 _Kolibri 阅读(107) 评论(0) 推荐(0)
摘要:题意:有个长度为$n$的监狱,犯人在位置$a$,cop在位置$b$,你每次可以向左或者向右移动一个单位,或者选择不动并在原地放一个爆竹$i$,爆竹$i$在$s[i]$秒后爆炸,cop每次向你的位置移动一个单位,你最终一定会被抓住(因为监狱是有限的),问你在被抓住前,最多能看到多少爆竹爆炸. 题解:我 阅读全文
posted @ 2020-12-27 02:08 _Kolibri 阅读(229) 评论(0) 推荐(0)
摘要:题意:你在一家公司工作$t$天,负责给饮水机灌水,饮水机最初有$k$升水,水的范围必须要在$[l,r]$内,同事每天白天都会喝$x$升水,你在每天大清早可以给饮水机灌$y$升水,问你在公司工作的这几天内,饮水机会不会发生故障. 题解:假如$x>=y$,那么,我们贪心的思路一定是每天让水减的尽可能少, 阅读全文
posted @ 2020-12-21 21:14 _Kolibri 阅读(160) 评论(0) 推荐(0)
摘要:题意:给你一个模式串$t$,现在要在主串$s$中删除多个子串,使得得到的$s$的子序列依然包含$t$,问能删除的最长子串长度. 题解:首先,我们不难想到,我们可以选择$s$头部到最右边的子序列的头部和最左边的子序列的尾部到$s$的尾部这两个子串,除去这两个子串,我们要找的最大子串一定在子序列的头部到 阅读全文
posted @ 2020-11-24 15:40 _Kolibri 阅读(90) 评论(0) 推荐(0)
摘要:题意:给你一组数,每个数都可以进行一次加一减一,问最后最多能有多少不同的数. 题解:我们可以用桶存每个数的次数,然后枚举$[1,150001]$来求对答案的贡献,然后贪心,这里我们不用担心其他乱七八糟的东西,直接根据桶中的个数来求贡献即可,但是要先选$i-1$的情况,因为后面的数取不到$i-1$,假 阅读全文
posted @ 2020-11-24 15:25 _Kolibri 阅读(126) 评论(0) 推荐(0)
摘要:题意:给你两个长度为$n$的数组$a$和$b$,元素值在$[0,n-1]$,可以对$b$数组的元素任意排序,求新数组$c$,满足$c_i=(a_i+b_i)\ mod\ n$,并且使得其字典序最小. 题解:这种取模求最小的题,我们一眼就能看出最优情况一定是$b_i=n-a_i$,可以先用set存一下 阅读全文
posted @ 2020-11-18 11:35 _Kolibri 阅读(85) 评论(0) 推荐(0)
摘要:题意:你有$n$个礼物,礼物有自己的种类,你想将它们按种类打包送人,但是打包的礼物数量必须不同(数量,与种类无关),同时,有些礼物你想自己留着,$0$表示你不想送人,问你在送出的礼物数量最大的同时,尽可能的使自己喜欢的留下来,输出能送出的最大礼物数,以及这些礼物中自己不喜欢的数目. 题解:首先,我们 阅读全文
posted @ 2020-11-16 20:38 _Kolibri 阅读(101) 评论(0) 推荐(0)
摘要:题意:有一组数,可以选择某个数$a_i$相邻的一个数$a_j$,然后可以让$a_i$加上或者减去$|a_i-a_j|$,问最少操作多少次使得数组中所有数相同. 题解:不难发现,每次操作必然可以使得一个数等于它旁边的任意一个数,所以让数组中的其他数等于出现次数最多的那个数一定是最优的,然后我们就去找与 阅读全文
posted @ 2020-11-13 09:31 _Kolibri 阅读(69) 评论(0) 推荐(0)
摘要:题意:有一长度为$n$的数组,求最多的区间和相同的不相交的区间的个数. 题解:我们可以先求一个前缀和,然后第一层循环遍历区间的右端点,第二层循环枚举左端点,用前缀和来$O(1)$求出区间和,$pos$表示当前区间和为$cur$的最右端点,如果我们枚举的左端点$j$比$pos[cur]$所在的最右端点 阅读全文
posted @ 2020-11-10 16:25 _Kolibri 阅读(97) 评论(0) 推荐(0)