• 51nod贪心算法入门-----活动安排问题


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

    输入

    第1行:1个数N,线段的数量(2 <= N <= 10000)
    第2 - N + 1行:每行2个数,线段的起点和终点(-10^9 <= S,E <= 10^9)
    输出
     
    输出最多可以选择的线段数量。
     
    输入示例

    3
    1 5
    2 3
    3 6

    输出示例

    2
     

    我们可以知道先安排最早结束的活动可以更多的安排活动。首先就是将所有的活动结束时间按先后顺序给排序;然后以结束时间为线索一路检索下去,判断开始时间是否早于前面一次活动的结束时间。这里可以用结构体或者两个数组来把一个活动的开始时间和结束时间联系起来。

     1 #include<stdio.h>
     2 #include<iostream>
     3 #define max 10001
     4 using namespace std;
     5 int main(){
     6     int n,i,j,temps,tempo;
     7     int start[max],over[max];
     8     while(scanf("%d",&n)!=EOF){
     9             int sum=0,t=-1000000000;
    10     for(i=0;i<n;i++){
    11         cin>>start[i]>>over[i];
    12     }
    13     for(i=0;i<n;i++)
    14        for(j=i;j<n;j++){
    15            if(over[i]>over[j]){
    16               tempo=over[i];
    17               over[i]=over[j];
    18               over[j]=tempo;
    19               temps=start[i];
    20               start[i]=start[j];
    21               start[j]=temps;
    22            }
    23        }
    24     for(i=0;i<n;i++){
    25         if(t<=start[i]){
    26             t=over[i];
    27             sum+=1;
    28         }
    29     }
    30     printf("%d
    ",sum);
    31     }
    32     return 0;
    33 }

    //原本我还考虑了活动时间不能为负数的情况,但是在提交时系统给出的数据中把负数也给算了进去。。。。。

  • 相关阅读:
    20200910-1 每周例行报告
    刷题-力扣-209. 长度最小的子数组
    刷题-力扣-面试题 05.03. 翻转数位
    刷题-力扣-118. 杨辉三角
    刷题-力扣-1894. 找到需要补充粉笔的学生编号
    刷题-力扣-498. 对角线遍历
    刷题-力扣-45. 跳跃游戏 II
    刷题-力扣-55. 跳跃游戏
    刷题-力扣-1221. 分割平衡字符串
    刷题-力扣-654. 最大二叉树
  • 原文地址:https://www.cnblogs.com/OMG-By/p/5244765.html
Copyright © 2020-2023  润新知