题目
活动安排问题要求在所给的活动集合中选出最大的相容活动子集。
输入格式:
第1行输入活动数k 第2行输入k个活动的开始时间 第3行输入k个活动的结束时间
输出格式:
最大相容的活动数
输入样例:
在这里给出一组输入。例如:
3
1 3 0
4 5 6
输出样例:
在这里给出相应的输出。例如:
1
答案
#include<bits/stdc++.h>
using namespace std;
struct Node{
int start,end;
};
bool cmp(Node x,Node y){
return x.end<y.end;
}
int main()
{
int n;
cin>>n;
Node node[n];
for(int i=0;i<n;i++)
cin>>node[i].start;
for(int i=0;i<n;i++)
cin>>node[i].end;
sort(node,node+n,cmp);
int last=node[0].end,cnt=1;
for(int i=1;i<n;i++)
{
if(node[i].start>=last)
{
last=node[i].end;
cnt++;
}
}
cout<<cnt;
}
注意
判断每个活动占用的时间都是左开右闭的,比如1—4和4—7这两个活动就是相容的,但1—4和3—7就是不相容的