
贪心算法
武汉ACM集训——贪心算法
一只菜阿喵
一只菜阿喵的blog
展开
-
武汉ACM集训——贪心-7
武汉ACM集训——贪心-7 洛谷 P6878 [JOI 2020 Final] JJOOII 2 题解 首先将字符串中各字母的下标按照字母种类分类存储。 接着依次遍历字母 J, O, I 当符合情况时,存储数据。 ans = min{ (右下标 - 左下标 + 1) - (3 x K) } AC代码 #include <bits/stdc++.h> using namespace std; const int maxn = 2e5 + 5; #define inf 0x3f3f3f3f int原创 2021-07-12 21:09:19 · 198 阅读 · 0 评论 -
武汉ACM集训——贪心-6
武汉ACM集训——贪心-6 洛谷 P1684 考验 题解 按照顺序选择诗句,分析题目数据,可以知道组成诗句的条件。 出现两种韵脚并且出现次数都大于等于 2,或者出现一种韵脚并且出现次数大于等于 4 。 遍历诗句,记录数据,判断是否成立,成立则 + 1,并且初始化数据。 AC代码 #include <bits/stdc++.h> using namespace std; map<int, int> ans; int main() { int n; scanf("%d原创 2021-07-12 21:08:45 · 132 阅读 · 0 评论 -
武汉ACM集训——贪心-5
武汉ACM集训——贪心-5 洛谷 P7427 [THUPC2017] 玩游戏 题解 如果有 n 轮游戏,则总分有 1 + 2 + 3 + … + n,即n×(n+1)2\frac{n\times(n+1)}22n×(n+1)。 统计得分时,需要让大得分先统计,用小得分补空缺。 从最后一轮游戏向前遍历,该局游戏得分 i < ans,则统计 i ,ans -= i,如果最后 ans 都不为 0,则不能完成统计。 AC代码 #include <bits/stdc++.h> using name原创 2021-07-14 14:21:44 · 163 阅读 · 0 评论 -
武汉ACM集训——贪心-4
武汉ACM集训——贪心-4 洛谷 P1190 [NOIP2010 普及组] 接水问题 题解 按照顺序排队接水,一个接完水,另一个瞬间接上。 将前 m 个数据作为 m 组,选取时间和最小的组,再该组数据中添加新数据,重复添加新数据。输出最大的时间和。 AC代码 #include <bits/stdc++.h> using namespace std; const int maxn = 1e4 + 5; int a[maxn]; // 优先队列,数值越小优先级越高 priority_queue&l原创 2021-07-12 21:07:45 · 126 阅读 · 0 评论 -
武汉ACM集训——贪心-3
武汉ACM集训——贪心-3 洛谷 P1090 [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G 题解 贪心: 选取两个最小的堆合并,产生新堆。重复合并。 AC代码 #include <bits/stdc++.h> using namespace std; typedef long long ll; #define inf 0x3f3f3f3f const int maxn = 1e4 + 5; // 优先队列,数值越小,优先级越高 priori原创 2021-07-12 21:07:13 · 114 阅读 · 0 评论 -
武汉ACM集训——贪心-2
武汉ACM集训——贪心-2 洛谷 P1803 凌乱的yyy / 线段覆盖 题解 根据题目可知,如果想要参加一场比赛之后参加越多的比赛,则这场比赛的结束时间要越早。 将比赛按照结束时间升序排序,遍历选择开始时间在上次比赛结束时间之后的比赛。 AC代码 #include <bits/stdc++.h> using namespace std; // 存比赛时间 struct s { int a, b; s(int x, int y) : a(x), b(y) {} // 重原创 2021-07-12 21:06:29 · 120 阅读 · 0 评论 -
武汉ACM集训——贪心-1
武汉ACM集训——贪心-1 洛谷 P1614 爱与愁的心痛 题解 题目数据量小,可以直接前缀和方法求解。 从 n 开始向前遍历,直到遍历到 m 时。ans = min{a[i] - a[i - m]}; AC代码 #include <bits/stdc++.h> using namespace std; const int maxn = 3e3 + 5; #define inf 0x3f3f3f3f int ans[maxn]; int main() { int n, m;原创 2021-07-12 21:05:41 · 143 阅读 · 0 评论