1004贪心算法acm

来源:互联网 发布:csol网络连接中断 编辑:程序博客网 时间:2024/04/26 12:18

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;
}

0 0
原创粉丝点击