安排上机

Description
每年新学期,计算中心的老师都要安排上机时间。 现设有n个班级E={1, 2, 3, …, n}, 要使用8号机房,同一时间内只允许一个班级使用该机房。设班级i上机的起止时间区间为[si,fi),如果班级i使用了8号机房, 则它在时间[si,fi)内占用该机房,若区间[si,fi)和[sj,fj)不相交,则称班级i和j均可安排上机的。现在要求你安排一下上机情况,使尽可能多的班级能有机会上机。
Input
有多组测试数据。 第1行先输入整数t(1<= t <= 100),表示共有t组测试数据。 每组测试数据输入共有3行, 第1行为一个整数n(1 <= n <= 2000) 表示班级数 第2行共n个整数,为这n个班级希望上机的开始时间(以某一时间为基准) 第3行共n个整数,为这n个班级上机的终止时间
Output
对于每个测试案例输出最多可以安排上机的班级

要用到结构数组,因为每个班的开始与结束时间是需要绑定的
基本思路:贪心算法,排到的班级结束得尽可能早,这样才能使安排的班级更多

#include <stdio.h>
struct time{
    int l,r;
};

int main(){
	struct time a[2100],temp; 
    int i,j,k,t,n,index;
    scanf("%d",&t);
    for(k=0;k<t;k++){
        scanf("%d",&n);
        for(i=0;i<n;i++) 
		scanf("%d",&a[i].l);
        for(i=0;i<n;i++) 
		scanf("%d",&a[i].r);
        for(i=0;i<n-1;i++){
        	index=i;
        	for(j=i+1;j<n;j++)
        	if(a[j].r<a[index].r)
        	index=j;
        	temp=a[index];
        	a[index]=a[i];
        	a[i]=temp;
		}
        int count=0,end=0;
        for(int i=0;i<n;i++){
            if(a[i].l>=end){
			end=a[i].r;
			count++;}
        }
        printf("%d\n",count);
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值