zoukankan      html  css  js  c++  java
  • 算法分析设计实践——相容问题

    问题:

    有n项活动申请使用同一个礼堂,每项活动有一个开始时间和一个截止时间。如果任何两个活动不能同时举行,问如何选择这些活动,从而使得被安排的活动数量达到最多。

    解析:

    首先以开始时间的进行排序,选择尽可能早开始的节目

    遇到如上图这种情况时,则选择较迟开始的节目更优,因此以开始时间进行排序错误

    其次以节目时间的长短进行排序,尽可能选择节目时间短的节目

    遇到如上图这种情况时,则选择时间较长的两个节目更优,因此节目时间长短进行排序错误

    以结束时间的早晚进行排序,尽可能选择结束时间较早的节目,目的是能够给后面的节目留下更多时间

    设计:

     1 struct node
     2 {
     3     int s, e;
     4     // s代表节目的开始时间, e代表结束时间
     5 }p[maxn];
     6 int n;
     7 int cmp(node& a, node& b)
     8 {
     9     return a.e < b.e;
    10 }

    分析:

    时间复杂度:O(nlogn)

    源码:

     1 #include<cstdio>
     2 #include<string.h>
     3 #include<algorithm>
     4 #include<cmath>
     5 #include<iostream>
     6 #include<vector>
     7 #include<queue>
     8 #include<set>
     9 #include<map>
    10 #include<cctype>
    11 #define ios ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
    12 #define mem(a,x) memset(a,x,sizeof(a))
    13 #define lson rt<<1,l,mid
    14 #define rson rt<<1|1,mid + 1,r
    15 #define P pair<int,int>
    16 #define ull unsigned long long
    17 using namespace std;
    18 typedef long long ll;
    19 const int maxn = 5e5 + 10;
    20 const ll mod = 998244353;
    21 const int inf = 0x3f3f3f3f;
    22 const long long INF = 0x3f3f3f3f3f3f3f3f;
    23 const double eps = 1e-7;
    24 
    25 struct node
    26 {
    27     int s, e;
    28     // s代表节目的开始时间, e代表结束时间
    29 }p[maxn];
    30 int n;
    31 int cmp(node& a, node& b)
    32 {
    33     return a.e < b.e;
    34 }
    35 
    36 int main()
    37 {
    38     scanf("%d", &n);
    39     for (int i = 1; i <= n; ++i)
    40     {
    41         scanf("%d %d", p[i].s, p[i].e);
    42     }
    43     sort(p + 1, p + 1 + n, cmp);
    44     int ans = 0, end = 0;
    45     for (int i = 1; i <= n; ++i)
    46     {
    47         if (p[i].s >= end)
    48         {
    49             ans++;
    50             end = p[i].e;
    51         }
    52     }
    53     printf("%d
    ", ans);
    54 
    55     return 0;
    56 }
    完整代码

    https://github.com/BambooCertain/Algorithm.git

  • 相关阅读:
    mysql--------常用命令
    PHP--------微商城实现微信授权登录
    mysql--------命令来操作表
    PHP--------解决网址URL编码问题
    php-----utf8和gbk相互转换
    javascript遍历json对象数据的方法
    PHP-----------HTTP请求的第三方接口
    PHP------数组和对象相互转化,stdClass Object转array
    include与require的区别
    PHP中exit()与die()的区别
  • 原文地址:https://www.cnblogs.com/DreamACMer/p/12912905.html
Copyright © 2011-2022 走看看