会场安排问题

时间限制:3000 ms  |  内存限制:65535 KB
难度:4
 
描述
学校的小礼堂每天都会有许多活动,有时间这些活动的计划时间会发生冲突,需要选择出一些活动进行举办。小刘的工作就是安排学校小礼堂的活动,每个时间最多安排一个活动。现在小刘有一些活动计划的时间表,他想尽可能的安排更多的活动,请问他该如何安排。
 
输入
第一行是一个整型数m(m<100)表示共有m组测试数据。
每组测试数据的第一行是一个整数n(1<n<10000)表示该测试数据共有n个活动。
随后的n行,每行有两个正整数Bi,Ei(0<=Bi,Ei<10000),分别表示第i个活动的起始与结束时间(Bi<=Ei)
输出
对于每一组输入,输出最多能够安排的活动数量。
每组的输出占一行
样例输入
2
2
1 10
10 11
3
1 10
10 11
11 20
样例输出
1
2
提示
注意:如果上一个活动在t时间结束,下一个活动最早应该在t+1时间开始
我是根据蓝书上的解题思路过来的,结果错了很多次,无奈看题解,感觉题解也有问题,综合一下就完美了
思路是基本的贪心思路,首先按照结束时间排序,然后在去掉被包含的块(比如,1-4,2-3,就去掉2,3),然后在
按照贪心思路,即可取得最大值。
#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <string>
#include <string.h>
using namespace std;
#define Maxn 10005

bool visit[Maxn];

struct Node{
    int a,b;
}A[Maxn];

bool cmp(Node a,Node b){
    return a.b < b.b;
}

int main(){
    int N;
    while(scanf("%d",&N)!=EOF){
        for(int q = 0; q < N; q++){
            int T;
            memset(visit,true,sizeof(visit));
            scanf("%d",&T);
            for(int i = 0; i < T; i++){
                scanf("%d%d",&A[i].a,&A[i].b);
            }
            sort(A,A+T,cmp);
            for(int i = 0; i < T; i++){
                for(int j = i+1; j < T; j++){
                    if(A[i].a > A[j].a){
                        visit[j] = false;
                    }
                }
            }
            int p;
            for(int i = 0; i < T; i++){
                if(visit[i]){
                    p = A[i].b;
                    visit[i] = false;
                    break;
                }
            }
            int cnt = 1;
            for(int i = 0; i < T; i++){
                if(visit[i]){
                    if(A[i].a > p){
                        cnt++;
                        p = A[i].b;
                    }
                }
            }
            cout << cnt << endl;
        }
    }
}

  

最新文章

  1. Fixing DSDT
  2. SQLite的时候判断语句是否纯在:出现RuntimeException
  3. solr5.2 mysql 增量索引
  4. 初识jQuery(适合初学者哟.........)
  5. CentOS 6.5 + Nginx 1.8.0 + PHP 5.6(with PHP-FPM) 负载均衡源码安装 之 (二)PHP(PHP-FPM)安装篇
  6. Ubuntu source insight3稳定性
  7. nmcli命令大集合
  8. Shell编程进阶篇(完结)
  9. [Bzoj 2547] [Ctsc2002] 玩具兵
  10. .NET Core实战项目之CMS 第二章 入门篇-快速入门ASP.NET Core看这篇就够了
  11. CSDN新版Markdown编辑器(Alpha 2.0版)使用示例(文首附源码.md文件)
  12. Linux核心命令
  13. java Timer 定时每天凌晨0点执行任务
  14. css美化页面
  15. java 从一个工程action 跳转到另外一个工程action
  16. python-反射案例讲解
  17. Linux下,根据FHS定义出来的每个目录的作用
  18. 主动触发事件 自定义事件 trigger 及其用法
  19. UVa 10954 全部相加(Huffman编码)
  20. 详解Hadoop Slots的含义

热门文章

  1. The Better Way to Debug Your JavaScript Program
  2. 将数字n转换为字符串并保存到s中
  3. dx环境搭建
  4. 安装sql server 2008,提示要删除SQL Server 2005 Express 工具 怎么解决?
  5. 帝国cms7.0设置标题图片(缺失状态下)
  6. 数据库基本概念-oracle介绍
  7. &lt;string&gt; &lt;string.h&gt;
  8. 使用python实现HMM
  9. linux源码Makefile的详细分析
  10. adb的logcat使用