zoukankan      html  css  js  c++  java
  • [转]喷水装置 南阳理工学院 OJ 题目 12

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=12

    昨天做了一道贪心算法题(见会场安排问题)。今天巩固一下。

    如上图所示,对于所有r>h/2的圆,圆周都会与上/下边界有2个交点,例如对于图中左边的圆,可以确定L1=x-√(r^2-(h/2)^2),R1=x+√(r^2-(h/2)^2),若L1<0,则L1=0;若R1>w,则R1=w.
    同样,对于右边的圆,则可以确定L2, R2.
    这样,对于所有给定的圆中满足r>h/2的,可以算出一个区间集合SI={[L1,R1], [L2,R2], [L3,R3]...[Ln,Rn]}.
    需要解决的问题就是怎样使用I中尽量少的区间完全覆盖[0,w].
    接下来的思路就类似会场安排问题了,首先将SI中所有元素按照右界下降排序,然后置当前右界Rc=0,计数count=0,然后按照贪心策略:

    1) 若SI为空,且Rc<w,算法结束,输出不可覆盖;否则从第一个(右界最大的)开始向后遍历SI
    2) 将首先遇到的I从SI中删去,其中I满足L(I)≤Rc
    4) count++
    3) 置Rc=R(I),若Rc=w,算法结束,输出count. 否则goto 1)

    类似的问题还有http://acm.nyist.net/JudgeOnline/problem.php?pid=6

  • 相关阅读:
    蓝桥杯之递归算法基本框架

    Dubbo是什么
    java
    java
    java
    java
    java
    负载均衡的理解
    设计模式学习
  • 原文地址:https://www.cnblogs.com/yinger/p/2043088.html
Copyright © 2011-2022 走看看