2 solutions
-
2
这是一道很经典的贪心题
做法主要分几个步骤:
一、按照每个活动的结束时间升序。
二、每次先选在可以安排的活动中结束时间最小的,然后计算总个数。
三、输出答案。
证明:
首先,在选第一个活动的时候,如果是要选某一个活动的时候,那么那个活动肯定是挤掉的活动最少的那个,毕竟如果都被挤掉了,那还选什么?
然后,在选后面的活动的时候也是同理。
那么怎么选挤掉的活动最少的那个?
答案是选结束时间最早的那个!
然后,我们就可以轻松的解出这道题了ψ(`∇´)ψ
AC code:
#include<bits/stdc++.h> using namespace std; struct dtl{ int s,f; }a[1001]; int n,ans=1,f; bool cmp(dtl x,dtl y){ return x.f<y.f; } int main(){ cin>>n; for(int i=1;i<=n;++i)cin>>a[i].s>>a[i].f; sort(a+1,a+1+n,cmp); f=a[1].f; for(int i=2;i<=n;++i){ if(a[i].s<f)continue; ans++; f=a[i].f; } cout<<ans<<endl; return 0; }
- 1
Information
- ID
- 1
- Time
- 1000ms
- Memory
- 512MiB
- Difficulty
- 5
- Tags
- # Submissions
- 143
- Accepted
- 55
- Uploaded By