zoukankan      html  css  js  c++  java
  • POJ2376 Cleaning Shifts

    http://poj.org/problem?id=2376

    类似于工作排序问题

    贪心策略:在符合时间情况的选项中 选择结束时间最迟的牛

    具体步骤:

    按照开始时间升序排列  如果 开始时间相同 按照结束时间升序排列

    设t为最终结束时间

    区间[1, t]为最终区间

    一次1 to n的循环 同时 扩大区间

    最后比较t和T的值即可

     1 #include <iostream>
     2 #include <stdio.h>
     3 #include <algorithm>
     4 
     5 using namespace std;
     6 
     7 typedef long long ll;
     8 ll T,N;
     9 struct Cow
    10 {
    11     ll st,ed;
    12     bool operator < (Cow c) const//按照结束时间升序排列 重载操作符
    13     {
    14         return st < c.st;
    15     }
    16 }cow[25005];
    17 
    18 //贪心策略 在合适的工作时间内 选择结束时间最晚的
    19 
    20 int main()
    21 {
    22     freopen("in.txt", "r", stdin);
    23     scanf("%lld%lld", &N, &T);
    24     for (int i = 0; i < N; i++)
    25     {
    26         scanf("%lld%lld", &cow[i].st, &cow[i].ed);
    27     }
    28     //printf("%d
    ", solve());
    29     sort(cow, cow+N);
    30     cow[N].st = 0x7fffffff;//因为后面要判断cow[i+1]
    31     bool found = false;
    32     ll t = 0, temp = 0;
    33     int ans = 0;
    34     for (int i = 0; i < N; i++)//这样只用找一遍即可,从小到大排列 不断的扩大t 扩大课工作时间的区间
    35     {
    36       //  found = false;
    37         if (cow[i].st <= t + 1)
    38         {
    39             if(cow[i].ed > temp)
    40             {
    41                 temp = cow[i].ed;
    42                 found = true;
    43             }
    44             if (cow[i+1].st > t+1 && found)//如果下一个 区间左端点 在t的右边 那么所找到的这个点是必然要要的
    45             {
    46                 t = temp;
    47                 ans++;
    48                 found = false;//t点更新 就去找下一个区间 这个之前放错了位置 每一次found都会改变t值
    49             }
    50         }
    51     }
    52     if (t<T) printf("-1
    "); else printf("%d
    ",ans);
    53     return 0;
    54 }
  • 相关阅读:
    es5中,一个在js中导入另一个js文件。
    移动端字体小于12号字的时候,line-height居中的问题
    初学者都能懂得 Git 说明
    一探 Vue 数据响应式原理
    文件的命名规则
    Vue 的 watch 和 computed 有什么关系和区别?
    MVC 与 Vue
    博客园皮肤设置
    java使用run和start后的线程引用
    Python改变一行代码实现二叉树前序、中序、后序的迭代遍历
  • 原文地址:https://www.cnblogs.com/oscar-cnblogs/p/6295076.html
Copyright © 2011-2022 走看看