zoukankan      html  css  js  c++  java
  • 算法课(经典贪心)

    Description

    在将来的某一天,ACM-ICPC在我们学校越来越受到重视了,大家对算法的学习热情非常高,学校决定每天都开设很多算法普及课,由于课程太多,学校没有太多的老师,于是学校派我们ACM集训队的成员去当小讲师。
    每个课程都有固定的开始时间和结束时间,我们集训队的小讲师精力非常充沛,只要课程不冲突,讲师们都乐意去上,上课时间冲突的话视为两个课程冲突,比如(1~3和2~4)就冲突,(1~5和5~10)也算冲突。
    现在安排课程讲师的Mrs.Zhang非常头疼,因为课程成百上千,需要的讲师也很多很多,为了安排这些讲师,Mrs.Zhang首先要知道每天最少需要多少讲师,你能告诉他吗?

    Input

    第一行输入一个整数T(T<=20),代表有T组数据。
    对于每组数据,第一行有一个整数N(0 <= N < 100),表示课程的数目。接下来N行,每行有两个整数S和T, (0 <= S < T <= 24), 表示该课程的开始时间和结束时间。

    Output

    输出T行,每行输出一个整数。

    Sample Input

    2
    3
    1 4
    3 5
    6 7
    4
    1 2
    3 4
    3 6
    7 8

    Sample Output

    2
    2

    开始的时候还以为直接排序看时间是否冲突就行,结果发现这样的话根本不是最优解。。。

    用开始的时间排序,然后记录每一位老师的结束时间,如果可能发生冲突就用于比对查看,经典的贪心思想。

    直接贴代码:

    #include<iostream>
    #include<algorithm>
    #include <cstdio>
    #define INF 0x3f3f3f3f;
    using namespace std;
    int teacher[50],tcou=0;
    struct S{
    	int a, b;
    }s[105];
    bool cmp(S s1,S s2){
    	return s1.a<s2.a;
    }
    bool judge(S s){
    	for(int i=0;i<tcou;i++)
    	  if(s.a>teacher[i]){
    	  	teacher[i]=s.b;
    	  	return true;
    	  }
    	return false;
    }
    int main(){
    int  T;
    cin>>T;
    while(T--){
    	int n,a,b;
    	tcou=0;
    	cin>>n;
    	for(int i=0;i<n;i++){
    		cin>>s[i].a>>s[i].b;
    	}
    	sort(s,s+n,cmp);//按照开始时间排序 
    	int count = 1;
    	teacher[tcou++]=s[0].b;
    	for(int i=1;i<n;i++){
    	   if(s[i].a<=s[i-1].b)//当前的开始时候上一个还没有结束,可能有矛盾 
               if(judge(s[i]))//判断其他所有的老师是否能够代替完成 
    		    continue; 
    		    else{//所有的老师都没有时间,增加一名老师 
    		       count++;
    			   teacher[tcou++]=s[i].b;
    			}
    	   else
    		  teacher[0]=s[i].b;//两个课程中间有间隔,任意老师都可以完成,没有冲突, 
    	}
    	if(n==0) cout<<0<<endl;
    	else
        cout<<count<<endl;
    }
    return 0;
    }
    




  • 相关阅读:
    vue+elemnet 实现自定义参数
    css 实现鼠标移上去标题向右滑动的效果
    vue 搜索关键字列表结果高亮显示
    leaflet 实现 测距、测面、清除测量的功能
    js对象的合并
    formdata的使用方法
    fromdata上传多个文件
    3.11formdata的使用
    微信小程序的自定义插件
    3.6
  • 原文地址:https://www.cnblogs.com/zswbky/p/5431951.html
Copyright © 2011-2022 走看看