Gold King安排计划|贪心
2026-04-05 15:48:15
发布于:河北
1阅读
0回复
0点赞
废话少说,上代码
#include<iostream>
#include<algorithm>
using namespace std;
// 定义活动结构体,包含开始时间b和结束时间e
struct activitys{
int b; // 开始时间
int e; // 结束时间
}a[10001]; // 存储活动数组
// 比较函数,按结束时间升序排序
bool cmp(activitys a,activitys b){
return a.e<b.e; // 按结束时间从小到大排序
}
int main(){
// 优化输入输出速度
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int m=0,n=0; // m表示测试用例数,n表示当前测试用例中活动数量
cin>>m; // 读入测试用例数
while(m--){ // 处理每个测试用例
cin>>n; // 读入活动数量
int cnt=1,last=0; // cnt记录选择的活动数,last记录上一个选中活动的结束时间
// 读入所有活动的开始时间和结束时间
for(int i=0;i<n;++i)
cin>>a[i].b>>a[i].e;
// 按结束时间升序排序(贪心策略:优先选择结束时间早的活动)
sort(a,a+n,cmp);
last=a[0].e; // 选择第一个活动(结束时间最早的)
// 遍历剩余活动,选择不冲突的活动
for(int i=1;i<n;++i){
if(a[i].b>last){ // 如果当前活动的开始时间大于上一个选中活动的结束时间
cnt++; // 选择这个活动
last=a[i].e; // 更新最后选中活动的结束时间
}
}
cout<<cnt<<"\n"; // 输出当前测试用例能选择的最大活动数
}
return 0;
}
这里空空如也








有帮助,赞一个