pzhu 1082: 活动安排问题 (贪心)

来源:互联网 发布:安卓用的java模拟器 编辑:程序博客网 时间:2024/05/16 09:10

1082: 活动安排问题

Description

我们都知道经典的活动安排问题是这样描述的:设有n个活动的集合E={1,2,…,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。每个活动i都有一个要求使用该资源的起始时间si和一个结束时间fi,且si <fi。如果选择了活动 i,则它在闭时间区间[si, fi]内占用资源。要求选择的活动时间上不能重叠,即上一个活动的结束时间不能和下一个活动的开始时间重叠(相等)。

Input

第一行输入活动数目 n

第二行输入每个活动的起始时间 si

第三行输入每个活动的结束时间 fi

(为了简单起见,以上输入的所有数据均大于等于1且不超过100)

Output

最多能选择的活动数目

Sample Input

3
1 5 9
2 6 10
3
1 2 4
3 5 7

Sample Output

3
2

分析:贪心求解,对于结构体{a,b},按照bi从小到大排序,然后扫一遍就行了。

AC代码:

#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn=100+10;struct node{int a,b;}nt[maxn];bool cmp(const node& n1,const node& n2){return n1.b<n2.b;}int main(){int n;while(scanf("%d",&n)==1){for(int i=0;i<n;i++)scanf("%d",&nt[i].a);for(int j=0;j<n;j++)scanf("%d",&nt[j].b);sort(nt,nt+n,cmp);int ans=1;int end=nt[0].b;for(int i=1;i<n;i++){if(nt[i].a>end){ans++;end=nt[i].b;}}printf("%d\n",ans);   }return 0;}




0 0
原创粉丝点击