2 solutions

  • 2
    @ 2024-9-26 17:14:23

    这是一道很经典的贪心题

    做法主要分几个步骤:

    一、按照每个活动的结束时间升序。

    二、每次先选在可以安排的活动中结束时间最小的,然后计算总个数。

    三、输出答案。

    证明:

    首先,在选第一个活动的时候,如果是要选某一个活动的时候,那么那个活动肯定是挤掉的活动最少的那个,毕竟如果都被挤掉了,那还选什么?

    然后,在选后面的活动的时候也是同理。

    那么怎么选挤掉的活动最少的那个?

    答案是选结束时间最早的那个!

    然后,我们就可以轻松的解出这道题了ψ(`∇´)ψ

    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
    @ 2023-5-26 16:45:22

    这是本一通上的例题。大概是橙题。

    做法就是按照每个活动的结束时间升序排序,然后再贪心一遍即可。

    • 1

    Information

    ID
    1
    Time
    1000ms
    Memory
    512MiB
    Difficulty
    5
    Tags
    # Submissions
    143
    Accepted
    55
    Uploaded By