#10000. 「一本通 1.1 例 1」活动安排(贪心算法)

it2026-08-28  5

活动安排

题目描述: 设有n 个活动的集合E={1,2,…,n} ,其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。每个活动 i 都有一个要求使用该资源的起始时间 Si 和一个结束时间 Fi,且 Si<Fi。如果选择了活动 i ,则它在时间区间 [Si,Fi) 内占用资源。若区间 [Si,Fi) 与区间 [Si,Fi) 不相交,则称活动 i 与活动 j 是相容的。也就是说,当 Fi<=Sj 或 Fj<=Si 时,活动 i 与活动 j 相容。选择出由互相兼容的活动组成的最大集合。 输入个数: 第一行一个整数 n; 接下来的 n 行,每## 标题行两个整数 Si 和 Fi 。 样例输入:

4 1 3 4 6 2 5 1 7

样例输出:

2

数据范围与提示:

1<=n<=1000

局部贪心策略可以得到全局最优解

AC代码:

#include<stdio.h> #include<algorithm> using namespace std; struct note { int s,f; } q[1010]; bool cmp(note x,note y) { if(x.f==y.f) return x.s<y.s; return x.f<y.f; } int main() { int n; scanf("%d",&n); int i; for(i=0; i<n; i++) scanf("%d%d",&q[i].s,&q[i].f); sort(q,q+n,cmp); int k=q[0].f,num=1; for(i=1; i<n; i++) if(k<=q[i].s) { num++; k=q[i].f; } printf("%d\n",num); return 0; }
最新回复(0)