青子的生日——求能玩的最多游戏项目数



题目:



分析:

根据题目意思,每一个游戏都要错开,不能在同一时间玩两个游戏,那么首先就是要确定第一个要玩的游戏是什么,显然是要先把时间段进行排序,那么无非就两种排法,一种是以开始时间的先后排序,另一种是以结束的时间进行排序。那么现在先分析一下这两种排序。如果以开始的时间点进行排序,那么早开始的游戏可能跨度好几个游戏,所以不能确定是否选取该游戏。可是,如果是以结束时间点排序,那么如果一个游戏的结束时间点比较早,就一定可以选取,所以我们采用第二种排序方法。先按结束时间点从小到大把给出的时间段进行排序,那么排在第一个的肯定是要选择的游戏。确定好第一个游戏后,接下来选取游戏的规则就是要看后一个游戏开始的时间点是否大于等于前一个游戏结束的时间点,如果是,那么就可以选取,否则就跳过。这样,就能玩最多的游戏了。



代码:

#include<iostream>
using namespace std;

int main()
{
    int n,i,j,t,count=1,right;
    int begin[100],end[100];

    cin>>n;

    for(i=0;i<n;i++)
	    cin>>begin[i]>>end[i];                  //分别记录各时间段开始和结束的时间点
	
    for(i=0;i<n-1;i++)                             //按结束时间从小到大排序
    {
	    for(j=i+1;j<n;j++)
	    {
		    if(end[j]<end[i])
		    {
			    t=begin[i];
			    begin[i]=begin[j];
			    begin[j]=t;
			    t=end[i];
			    end[i]=end[j];
			    end[j]=t;
		    }
	    }
    }

    right=end[0];                          //记录上一个游戏结束的时间点

    for(i=1;i<n;i++)
    {
	    if(begin[i]>=right)
	    {
		    count++;
		    right=end[i];
	    }
    }

    cout<<count<<endl;
    return 0;
 } 

**
**

原文地址:https://www.cnblogs.com/jiuweilinghu/p/5929490.html