WELCOME

任何一个伟大的目标,都有一个微不足道的开始。

「一本通 1.1 例 1」活动安排(贪心算法)题解

「一本通 1.1 例 1」活动安排(贪心算法)题解

思路

贪心。
定义一个结构体 Node,用于记录每个活动的信息。里面重载 < 运算符,用于排序。输入结束后根据 f[i] 的大小排序。

贪心算法的效率极高。当输入的活动已按结束时间的非减序排列,算法只需 O ( n ) O(n) O(n) 的时间安排 n n n 个活动,使最多的活动能相容地使用公共资源。如果所给出的活动未按非减序排列,可以用 O ( n log ⁡ n ) O(n\log n) O(nlogn) 的时间重排。

若被检查的活动 i i i 的开始时间 S i S_i Si 小于最近选择的活动 j j j 的结束时间 f i f_i fi,则不选择活动 i i i,否则选择活动 i i i 加入答案中。

贪心算法并不总能求得问题的整体最优解,但对于活动安排问题,贪心算法却总能求得整体最优解,即它最终所确定的相容内容活动的规模最大。这可以用数学归纳法证明。

Code

#include <bits/stdc++.h>
using namespace std;
struct Node
{
	int l, r;
	int operator<(Node A)
	{
		return l < A.l | (l == A.l & r < A.r);
	}
} p[2000];
int n, Q, C, i;
main()
{
	cin >> n;
	for (; i < n;)
		cin >> p[i].l >> p[i++].r;
	sort(p, p + n);
	for (i = 0; i < n; i++)
		if (C > p[i].l)
			C = min(C, p[i].r);
		else
			Q++, C = p[i].r;
	cout << Q;
}

广告

绿树公司 - 官方网站:https://wangping-lvshu.github.io/LvshuNew/

绿树智能 - 官方网站:https://wangping-lvshu.github.io/LvshuZhineng/

(现在使用,人人均可获得300元大奖)

posted @ 2022-07-12 20:35  绿树公司  阅读(133)  评论(0)    收藏  举报