相容问题
Posted powerkeke
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了相容问题相关的知识,希望对你有一定的参考价值。
问题
有n项活动申请使用同一个礼堂,每项活动有一个开始时间和一个截止时间。如果任何两个活动不能同时举行,如何选择这些活动,从而使得被安排的活动数量达到最多。
解析
共有10项活动,开始时间和结束时间分别为
{(1,4),(3,5),(5,7),(0,6),(3,8),(5,9),(8,11),(6,10),(8,12),(2,13),(12,14)}
- 如果按照每项活动的结束时间从小到大排序后的顺序进行。
则顺序为{(1,4),(3,5),(0,6),(5,7),(3,8),(5,9),(6,10),(8,11),(8,12),(2,13),(12,14)},则可以安排的活动有4个,分别为(1,4),(5,7),(8,11),(12,14)。
- 如果按照每项活动的开始时间从小到大排序后的顺序进行。
则顺序为{(0,6),(1,4),(2,13),(3,5),(3,8),(5,7),(5,9),(6,10),(8,11),(8,12),(12,14)},则可以安排的活动有3个,分别为(0,6),(6,10),(12,14)。
- 如果按照每项活动的占用时间从小到大排序后的顺序进行。
则顺序为{(3,5),(5,7),(12,14),(1,4),(8,11),(5,9),(6,10),(8,12),(3,8),(0,6),(2,13)},则可以安排的活动有3个,分别为(3,5),(5,7),(12,14)。
设计
按照每项活动的结束时间从小到大排序后的顺序进行即可。
分析
用sort函数自定义排序,复杂度为O(NlogN);遍历一遍数组,复杂度为O(N)。因此总复杂度为O(N+NlogN)。
/*
author: keke
project name:相容问题
Time Complexity: O(nlog(n))
*/
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define db double
const int maxn=110;
int n,m,t,is,cnt,ans;
struct xx{
int l,r;
}xx[maxn];
bool cmp(struct xx a,struct xx b){
if(a.r==b.r)return a.l<b.l;
return a.r<b.r;
}
int main(){
ios::sync_with_stdio(false);
cout<<fixed<<setprecision(2);
while(cin>>n){
if(!n)return 0;
int ans=0,cnt=0;
for(int i=1;i<=n;i++)cin>>xx[i].l>>xx[i].r;
sort(xx+1,xx+1+n,cmp);
for(int i=1;i<=n;i++){
if(cnt<=xx[i].l){
++ans;
cnt=xx[i].r;
}
}
cout<<ans<<"
";
}
return 0;
//good job!
}
以上是关于相容问题的主要内容,如果未能解决你的问题,请参考以下文章
解決 VMware Workstation 与 Device/Credential Guard 不相容,无法启动虚拟机的问题