HDU 2037 今年暑假不AC

本文介绍了一道经典的贪心算法题目,通过合理安排观看多个已知起止时间的电视节目的顺序,来最大化可观看的节目数量。文章提供了详细的解题思路及C++代码实现。

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

解题报告:

题目大意:有若干的节目,现在知道节目开始的时间和结束的时间,问题是求最多可以看多少个完整的节目。

贪心题,想要在固定的时间内看尽量多的节目就必须保证看每个节目的时候都要尽可能快的结束当前这个节目,以便尽快看下一个节目。具体贪心的思想就是首先将所有的节目按照结束的时间从早到晚排一次序,然后定义一个时间指针,指向当前的时间,然后将开始时间距离当前时间最近的那个的那个节目看掉,因为已经按照节目结束的时间进行排过序 了,所以不用考虑选择当前时间以后的哪一个节目的问题。当当前时间指针移动到了结束时间最晚的那个节目的结束的时间时,便结束循环。

 1 #include<cstdio>
 2 #include<algorithm> 
 3 struct node {
 4     int sta,end;
 5 }list[100+5];
 6 bool cmp(node a,node b) {
 7     return (a.end<b.end);
 8 }
 9 int main() {
10     int n;
11     while(scanf("%d",&n)&&n!=0) {
12         for(int i=1;i<=n;++i)
13         scanf("%d%d",&list[i].sta,&list[i].end);
14         std::sort(list+1,list+n+1,cmp);
15         int now=0,sum=0;
16         for(int i=1;i<=n;++i)
17         if(list[i].sta>=now) {
18             sum++;
19             now=list[i].end;
20         }
21         printf("%d\n",sum);
22     }
23     return 0;
24 }
View Code

 

转载于:https://www.cnblogs.com/xiaxiaosheng/archive/2013/05/13/3076560.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值