• 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 }

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

  • 相关阅读:
    Android碰到的怪问题
    Linux转换文件格式
    Android 打包签名 从生成keystore到完成签名
    重写SimpleCursorAdapter
    sqlite的数据导入 导出
    日语单词检索WebService 账户API和示例更新
    日语单词检索 WebService 试运行 和简单说明
    使用扩展方法,让菜单也可以Clone
    接口里面的静态方法痒啊
    创业难,守业更难
  • 原文地址:https://www.cnblogs.com/OMG-By/p/5244765.html
Copyright © 2020-2023  润新知