「一本通 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元大奖)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lvshu · 绿树

非常感谢您的搭讪

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值