zoukankan      html  css  js  c++  java
  • 青子的生日——求能玩的最多游戏项目数



    题目:



    分析:

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



    代码:

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

    **
    **

  • 相关阅读:
    Servlet中isCommitted含义及发生的条件
    戏说java web开发中的listener和filter
    Android中以JAR形式封装控件或者类库
    华为总裁在“2012实验室干部与专家座谈会”上的发言!(转)
    C#进行Visio二次开发
    我是谁,从哪里来,将要到哪里去?
    LTE相关网元功能
    走出柏拉图的“洞穴”
    LTE的协议结构
    被联通欠款拖死,被移动集采玩死
  • 原文地址:https://www.cnblogs.com/jiuweilinghu/p/5929490.html
Copyright © 2011-2022 走看看