zoukankan      html  css  js  c++  java
  • hdu2037 今年暑假不AC[贪心][区间调度问题]

    题目地址

    hdu2037

    题干


    代码和解释

    本题使用贪心。有三种贪心策略:开始时间最早,结束时间最早,用时最短。第二种是正确的策略,因为结束得越早,后面就可以有越多节目被看。
    我使用了优先队列进行排序,以结束时间数值小的为高优先级。
    c++代码如下:

    #include<iostream>
    #include<queue>
    using namespace std;
    struct node{
    	int Beg;
    	int End;
    	friend bool operator<(node n1,node n2){
    		return n1.End>n2.End;//End小的优先级高 
    	}
    }TV;
    int main()
    {
    	int n;//节目总数
    	int count;//最多可以看完的节目总数 
    	int last_end;
    	while(~scanf("%d",&n)&&n){
    		priority_queue<node>chn;
    		while(n--){	
    			scanf("%d%d",&TV.Beg,&TV.End);
    			chn.push(TV);
    		}
    		count=1;//可以看完第一个节目 
    		last_end=chn.top().End;//第一个看完的节目的结束时间 
    		/*while(!chn.empty()){
    			printf("%d %d
    ",chn.top().Beg,chn.top().End);
    			chn.pop();
    		}*/
    		while(1){
    			if(chn.empty()) break;
    			if(chn.top().Beg>=last_end){//可以看这个节目 
    				count++;
    				last_end=chn.top().End;
    				chn.pop();
    			} 				
    			else{//不能看这个节目 
    				chn.pop();
    			}
    		}
    		printf("%d
    ",count);
    	} 
    }
    

    参考

    贪心法思想:
    走一步看一步,而且只看一步;
    在每一步,选当前最优的;
    不回头,不改变已有的选择。
    贪心法只根据当前已有的信息做出选择,而且一旦做出了选择,不管将来有什么结果,这个选择都不会改变。换言之,贪心法并不是从整体最优考虑,它所做出的选择只是在某种意义上的局部最优。
    这种局部最优选择并不总能获得整体最优解(Optimal Solution),但通常能获得近似最优解(Near-Optimal Solution)。

    • 贪心法求解的问题的特征:
      1)最优子结构性质
      当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质,也称此问题满足最优性原理。
      2)贪心选择性质
      所谓贪心选择性质是指问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来得到。
    • 动态规划法通常以自底向上的方式求解各个子问题,而贪心法则通常以自顶向下的方式做出一系列的贪心选择。
  • 相关阅读:
    面向消息的持久通信与面向流的通信
    通信协议
    分布式系统简介
    Hadoop on Yarn 各组件详细原理
    Parquet文件结构笔记
    Redis部分数据结构方法小结
    Storm Ack框架笔记
    MapReduce格式与类型
    Hadoop 2.6 MapReduce运行原理详解
    Hadoop SequenceFile数据结构介绍及读写
  • 原文地址:https://www.cnblogs.com/hardcoreYutian/p/11455556.html
Copyright © 2011-2022 走看看