杭电OJ | 2037 今年暑假不AC 贪心算法

本文探讨了一个电视节目调度问题,通过输入多个电视节目的开始和结束时间,算法旨在找出能在不冲突的情况下观看的最多节目数量。使用了时间表数组来记录每个时间段是否被占用,从而实现高效计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2037

Input          输入数据包含多个测试实例,每个测试实例的第一行只有一个整数n(n<=100),表示你喜欢看的节目的总数,然后是n行数据,每行包括两个数据Ti_s,Ti_e (1<=i<=n),分别表示第i个节目的开始和结束时间,为了简化问题,每个时间都用一个正整数表示。n=0表示输入结束,不做处理。

Output       对于每个测试实例,输出能完整看到的电视节目的个数,每个测试实例的输出占一行。

Sample Input

12

1 3 3 4 0 7 3 8 15 19 15 20 10 15 8 18 6 12 5 10 4 14 2 9 0

起初以为只是按顺序排列查找即可...谁想使求能看最多的电视情况...

#include<stdio.h>
int main()
{
    int inputnum;
    while(scanf("%d",&inputnum)!=EOF&&inputnum!=0){
    	int i,j,start,end;
    	int timetable[24]={0};
    	int count = 0;
    	for(i=0; i<inputnum; i++){
    		scanf("%d %d",&start,&end);
    		if(i==0){
    			for(j=start; j<=end; j++){
    				timetable[j] = 1;
    				count++;
				}
			}
			else{
				int flag=0;
				for(j=start; j<=end; j++){
					if(timetable[j]==1){
						flag=1;
						break;
					}
				}
				if(flag==0){
					for(j=start; j<=end; j++){
    					timetable[j] = 1;
					}
					count++;
				}
			}
		}
		printf("%d\n",count);
	}
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值