zoukankan      html  css  js  c++  java
  • 活动安排问题(贪心)

    Description

    设有n个活动的集合E={1, 2, ..., n},其中,每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。每个活动i 都有一个要求使用该资源的起始时间 si 和一个结束时间 fi ,且si < fi。如果选择了活动i,则它在半开时间区间[si, fi)内占用资源。若区间[si, fi)与区间[sj, fj)不相交,则称活动i与活动j是相容的。也就是说,当 sifjsjfi 时,活动 i 与活动 j 相容。活动安排问题就是要在所给的活动集合中选出最大的相容活动子集合。

    Input

    输入的第一个为测试样例的个数T,接下来有T个测试样例。

    每个测试样例的第一行是一个整数nn ≤ 1000 ),表示有n个活动。

    接下来n行,每行两个整数 sifi 表示第 i 个活动的起始时间和结束时间。

    Output

    对应每个测试样例输出一行,格式为"Case #: D",其中'#'表示第几个测试样例(从1开始计),D为最大的相容活动子集合的活动数量。

    Sample Input

    1
    11
    1 4
    3 5
    0 6
    5 7
    3 8
    5 9
    6 10
    8 11
    8 12
    2 13
    12 14

    Sample Output

    Case 1: 4

    #include<stdio.h>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    struct action{
        int s ; //活动开始时间
        int f ; //活动结束时间
    };
    action a[1001];
    bool cmp(const action &a,const action &b){
    
        if(a.f<=b.f)return true;
        else return false;
    }
    int  Selector(int n,action a[]){
        int sum=1;
        int preEnd = 1;
        for ( int i =2;i<=n;i++){
            if(a[i].s>=a[preEnd].f){
                sum++;
                preEnd = i;
            }
        }
        return sum;
    }
    int main(){
        int T,n;
        cin >> T ;
        for(int i=1;i<=T;i++){
            cin >> n;
            for(int j=1;j<=n;j++){
                cin >> a[j].s >> a[j].f;
            }
            sort(a,a+n+1,cmp);
            int sum = Selector(n,a);
            cout << "Case " << i << ": "<< sum <<endl;
        }
    }
  • 相关阅读:
    自己动手写动态网站
    CompareValidator控件
    跨数据库服务器查询和跨表更新
    在Windows 2003 IIS 6.0中配置PHP的运行环境(图)
    sql语句跨服务器跨数据库执行
    ASP语法
    web 中 common
    common js
    经典的SQL面试题
    asp:TextBox 的ReadOnly属性 造成后台无法取到值
  • 原文地址:https://www.cnblogs.com/dichuan/p/8213544.html
Copyright © 2011-2022 走看看