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 }
  • 相关阅读:
    11.11 开课二个月零七天(ajax和bootstrp做弹窗)
    11.10 (下午)开课二个月零六天(ajax验证用户名,ajax调数据库)
    获取当月时间段。
    JavaScript prototype 使用介绍
    JavaScript arguments对象
    JS,DOM对象新知识点整理
    JS清除选择的内容
    限制显示内容,超出用省略号代替的方法
    封装php连接数据库返回方法
    div跟随鼠标移动代码
  • 原文地址:https://www.cnblogs.com/oscar-cnblogs/p/6295076.html
Copyright © 2011-2022 走看看