贪心
xbb052
c++大学生
展开
-
货仓选址(贪心)
依据贪心的做法的话,那选的地方肯定要放在所有位置的中间位置,才能使得距离之和为最小值。现在需要在数轴上建立一家货仓,每天清晨,从货仓到每家商店都要运送一车商品。为了提高效率,求把货仓建在何处,可以使得货仓到每家商店的距离之和最小。如果有奇数个点的话,直接取排序后位置最中间那一个点 作为货仓地址就好了。在一条数轴上有 N 家商店,它们的坐标分别为 A1∼AN。偶数的话,取最中间的两个位置 的中点为货仓地址。输出一个整数,表示距离之和的最小值。第二行 N 个整数 A1∼AN。第一行输入整数 N。原创 2023-03-01 15:12:34 · 59 阅读 · 0 评论 -
排队打水(贪心,排序不等式)
有 n 个人排队到 1 个水龙头处打水,第 i 个人装满水桶所需的时间是 ti,请问如何安排他们的打水顺序才能使所有人的等待时间之和最小?因为第 i 个人打水要打 t [ i ] 时间,所以没有打水的人的等待时长为 ( n - i )* t [ i ].第二行包含 n 个整数,其中第 i 个整数表示第 i 个人装满水桶所花费的时间 ti。当 i 越小 ( n - i ) 越大,为了让和最小,必须让 t [ i ] 尽可能小。输出一个整数,表示最小的等待时间之和。第一行包含整数 n。原创 2023-03-01 14:53:09 · 243 阅读 · 0 评论 -
acwing3485最大异或和(trie树,贪心)
这里用到了前缀异或和,当超出m的限制时需要将区间往后移,所以额外声明cnt数组来判断该点是否存在所求的区间里,于是在插入操作时额外定义一个参数v表示插入或者删去。对于 100%100% 的数据,1≤M≤N≤10^5,0≤ai≤2^31−1。子数组的异或和即为子数组中所有元素按位异或得到的结果。对于 50%50% 的数据,1≤M≤N≤1000。给定一个非负整数数列 a�,初始长度为 N�。对于 20%20% 的数据,1≤M≤N≤100。子数组中,找出子数组异或和的最大值。输出可以得到的子数组异或和的最大值。原创 2023-02-26 20:45:51 · 283 阅读 · 0 评论 -
裁剪序列(单调队列,贪心,dp,multiset,双指针)
给定一个长度为 N 的序列 A,要求把该序列分成若干段,在满足“每段中所有数的和”不超过 M 的前提下,让“每段中所有数的最大值”之和最小。第二行包含 N 个整数,表示完整的序列 A。涉及动态规划,贪心,单调队列和双指针。序列A中的数非负,且不超过10^6。第一行包含两个整数 N和 M。如果结果不存在,则输出 −1。输出一个整数,表示结果。原创 2023-02-26 19:15:11 · 90 阅读 · 0 评论 -
拼数(一般贪心)
来源:牛客网题号:NC16783时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 262144K,其他语言524288K。原创 2023-02-26 17:10:22 · 457 阅读 · 0 评论 -
区间选点acwing905(贪心算法)
本题考虑贪心做法,遍历枚举每一个区间,以右端点为准,如果后面每一个区间左端点严格大于该右端点,更新ed为该区间的右端点,答案+1.同理,如果不大于,证明该区间重合,不做任何处理。给定 N 个闭区间 [ai,bi],请你在数轴上选择尽量少的点,使得每个区间内至少包含一个选出的点。接下来 N 行,每行包含两个整数 ai,bi,表示一个区间的两个端点。最后判断之后的左端点是否严格大于当前的右端点,是的话更新右端点和答案。所以需要创建结构体存储每个区间的左端点,右端点。输出一个整数,表示所需的点的最小数量。原创 2023-02-19 21:21:54 · 56 阅读 · 0 评论