洛谷 CF597B 题解
我的思路:
这道题就是贪心中的经典区间覆盖问题,先用右端点从小到大排序目的是先进行时间少的订单,然后用贪心算法进行计算:循环判断:
- 如果当前时间和订单开始时间不重复,接受订单,就让计数器累加,然后把当前时间更新为订单结束时间。
- 否则拒绝订单,进行下一次循环
最后输出最大接受订单数
代码如下:
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
struct Node{
int s; //订单开始时间
int e; //订单结束时间
}a[500010];
bool cmp(Node a,Node b){
return a.e<b.e; //右端点从小到大排序
}
int ans; //计数器
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i].s>>a[i].e;
sort(a+1,a+n+1,cmp);
int now_time=-1; //时间可以从 0 开始,当前时间要初始化成 -1
for(int i=1;i<=n;i++){
if(a[i].s>now_time){ //如果订单开始时间和当前时间不重复,就可以接受订单
ans++; //符合条件就计数器累加
now_time=a[i].e;
}
}
cout<<ans<<endl; //最后输出可以接受的最大订单数
return 0;
}
本文来自博客园,作者:Black--Panda,转载请注明原文链接:https://www.cnblogs.com/liu-black/p/cf597b-tijie.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现