贪心算法—Problem E

贪心算法—Problem E

题意

有多个电视节目,每个节目有不同的开始时间和结束时间。在不冲突的情况下求能完整观看的最多节目数。

解题思路

类比于课上例题,定义结构体,包含开始时间和结束时间。将输入的数据按结束时间升序排列。定义能看到的节目数和起始时间都默认为0。将第一个节目放入后,把时间改为第一个节目的结束时间。往下遍历,以此比较下一个节目开始时间与上一个节目结束时间(已赋值给time),同时计数器++。遍历完成后,得到并输出可以看的最多节目数。

 

感想

类比于课上例题,感觉一般,还是得进一步熟悉贪心算法。继续练习。

AC代码

#include<iostream>

#include<algorithm>

 

using namespace std;

 

struct TvPro{

       int Ti_s;

       int Ti_e;

}TvPro[100];

 

bool cmp(struct TvPro a,struct TvPro b)

{

       if (a.Ti_e<=b.Ti_e)return true;

       returnfalse;

}

 

int main()

{

       int n;

       while(cin>>n,n)

       {

              inti,time=0,count=0;

              for(i=0;i<n;i++)

              {

                     cin>>TvPro[i].Ti_s>>TvPro[i].Ti_e;

              }

              sort(TvPro,TvPro+n,cmp);

              for(i=0;i<n;i++)

              {

                     if(TvPro[i].Ti_s>= time) 

           { 

               count++; 

               time = TvPro[i].Ti_e; 

           } 

        } 

        cout<< count << endl; 

    } 

      

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值