小e看电视(贪心题)

本文介绍了使用贪心法解决C++中的动画播放问题,通过比较节点的右端点和左端点,优先选择右端较小或左端点较小的动画,以最大化观看动画数量。
摘要由CSDN通过智能技术生成

参考:

#7贪心法的条件和分析步骤 | C++算法基础系列 | 0基础小白都能看懂的算法教程,图解ACM算法_哔哩哔哩_bilibili 

#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 9;
struct node
{
	int l;
	int r;
}a[N];
int main()
{
	int n;

	cin >> n;
	for(int i=1;i<=n;i++)
		cin >> a[i].l >> a[i].r;

	sort(a + 1, a + 1 + n, [](const node& a, const node& b)
	{
			return (a.r == b.r ? a.l < b.l : a.r < b.r);
	}
	);
	int ans = 0, nowtime = 0;
	for (int i = 1; i <= n; i++)
	{
		if (a[i].l < nowtime)continue;    //如果该动画的左端点l小于当前时间则进行下一次循环(因为必定看不了)
		else {
			nowtime = a[i].r;
			ans++;
		}
	}
	cout << ans << endl;
	return 0;
}

思路是贪心,排列时先去比较右端r,如果r相等,则选择l小的,若r不想等,则选择r小的。

优先选择右端r小的是因为r小,则后面能够选择的更多

而r相等,选择l小的是看完一整个动画后,遇到那种l=r的动画能选择。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值