1004贪心算法acm

1. 题目编号:1004;

2. 简单题意:想要看最多的节目,输入多组数据,以及节目开始时间跟结束时间,输出能看的最多节目数;

3.解题思路形成过程:如果将开始时间进行排序,开始时间相同的按结束时间升序排序,这样其中数据可能包括这样的例子:1  2 ,1  3,2  3 。这样的例子将会使结果少一组数据,会出现wa。如果将结束时间先进行排序,结束时间相同的按开始时间升序排序,从第一个开始循环,这样才能找出最先结束的,看到最多节目。

4.感想:这道题与老师上课讲的演唱会占用一个场地的那道例题大体思路基本一致,当时考虑这道题仅仅是考虑将开始时间排序,这样就可能漏到情况,想了好久,想到了一个特别麻烦的解法,但是那要绕好几个圈,当考虑到将结束时间排序才恍然大悟。

5.AC代码

#include<iostream>
#include <algorithm>


using namespace std;


struct jm
{
    int ti_s;
    int ti_e;
}ti[101];


bool cmp(jm a, jm b)
{   if(a.ti_e < b.ti_e) return true ;
    if(a.ti_e == b.ti_e&&a.ti_s < b.ti_s) return true ;
     else return false;
}


int main()
{
    int n,time,time_max;
    while(cin>>n&&n!=0)
    {
      for(int i=0;i<n;i++)
      {
          cin>>ti[i].ti_s>>ti[i].ti_e;
      }
      sort(ti, ti+n, cmp);
                                      // for(int i=0;i<n;i++) cout<<ti[i].ti_s<<ti[i].ti_e<<endl;
      time=1;
      int a=ti[0].ti_e;
      for(int j=0;j<n-1;j++)
    {
          if(ti[j+1].ti_s>=a)
          {
              time++;
              a=ti[j+1].ti_e;
          }
    }
    cout<<time<<endl;
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值