• [贪心] 51nod 1428 活动安排问题


    1428 活动安排问题 

    基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题

     收藏

     关注

    有若干个活动,第i个开始时间和结束时间是[Si,fi),同一个教室安排的活动之间不能交叠,求要安排所有活动,最少需要几个教室? 

    Input

    第一行一个正整数n (n <= 10000)代表活动的个数。
    第二行到第(n + 1)行包含n个开始时间和结束时间。
    开始时间严格小于结束时间,并且时间都是非负整数,小于1000000000

    Output

    一行包含一个整数表示最少教室的个数。

    Input示例

    3
    1 2
    3 4
    2 9

    Output示例

    2

    经典的贪心算法

    结构体存储数据

    按开始 结束 升序 排序

    往房间数组中塞

    房间数组中只存结束时间

    塞数规则:

    如果当前活动 i 的 开始时间 大于 房间数组 中的 结束时间

    就用 当前活动 i 的 结束时间 替换掉 房间数组 中的 结束时间

    如果所有 房间数组 中的 结束时间 都比 活动 i 中的 开始时间 大

    那么再开一个房间 结束时间 赋值为当前活动 i 的结束时间;

    #include <iostream>
    #include <algorithm>
    using namespace std;
    int clas[10000] = {0};//房间数组
    struct active
    {
    	int beg;
    	int end;
    }arr[11000];
    bool cmp(active x, active y)
    {
    	if(x.beg != y.beg)
    		return x.beg < y.beg;
    	else
    		return x.end < y.end;
    }
    int main()
    {
    	ios::sync_with_stdio(false);
    	int n, flag = 1;
    	cin>>n;
    	for(int i = 0; i < n; i++)
    	{
    		cin>>arr[i].beg>>arr[i].end;
    	}
    	sort(arr, arr + n, cmp);
    	/*for(int i = 0; i < n; i++)
    	{
    		cout<<arr[i].beg<<' '<<arr[i].end<<endl;
    	}*/
    	for(int i = 0; i < n; i++)
    	{
    		int j;
    		for(j = 0; j < flag; j++)
    		{
    			if(arr[i].beg >= clas[j])
    			{
    				clas[j] = arr[i].end;
    				break;
    			}
    		}
    		if(j == flag)
    		{
    			clas[flag ++] = arr[i].end;
    		}
    	}
    	cout<<flag<<endl;
    	return 0;
    }
  • 相关阅读:
    nginx+tomcat负载均衡
    一个tomcat部署多个应用实例
    多级菜单存在同一张表,一次性把所有关系取出来
    关于ajax post请求,参数过大产生的问题解决 Java
    nginx 的 proxy_cache 缓存配置
    nginx 安装 lua_nginx_module 模块(nginx——lua 学习笔记1)
    nginx 反向代理
    nginx的共享字典项api(操作方法)
    sed 常用命令 网址
    Django之 数据库ORM
  • 原文地址:https://www.cnblogs.com/zeolim/p/12270688.html
Copyright © 2020-2023  润新知