zoukankan      html  css  js  c++  java
  • BZOJ1857 传送带 (三分法求单峰函数极值)

    第一次发BZOJ的题解,先从水题开始吧,好不容易找到一道水题,那就从这题开始吧。

    1.题设部分{

    题目描述:

    在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段。两条传送带分别为线段AB和线段CD。lxhgww在AB上的移动速度为P,在CD上的移动速度为Q,在平面上的移动速度R。现在lxhgww想从A点走到D点,他想知道最少需要走多长时间?

    Sample Input

    0 0 0 100
    100 0 100 100
    2 2 1

    Sample Output

    136.60

    [Submit]

    }

    2.题目分析{

      对于这道题,我的物理老师经常说,做物理题要结合图做,比如做力学的题目要做受力分析,做电学的题目要画电路图,这是一道运动学的题目,所以我们可以先把样例画出来,如下图:

    管他对不对呢,反正大概就这样,将就着能用就行,显然,我们可以发现,答案必然是从AB上的某一个点出发,经过平面,到达CD上的另一点然后到达D。即答案可以表示为

    |AF|/P+|FE|/R+|ED|/Q ,其中F∈AB,E∈CD

    我们考虑将F点(你喜欢E点就E点)确定,那么剩下的问题就在于确定E点(若前面选择E点那就是确定F点,以后就统一E点算了)。那么怎么确定E点呢,生活常识告诉我们,在CD上肯定有一个最优的解,这个点两侧的解都越来越差,即函数图像大致为下面这样:

    容易看出这是一个单峰函数,还是一个上凸的单峰函数,那么我们的问题就暂时变为了求这个单峰函数的极值。

    下面介绍一种求单峰函数极值的方法:三分法,lrj的蓝书上有较为详细的记载。

    三分法:

      对于任意一个上凸函数,选取函数上任意两个点A,B(xA<xB),若满足yA<yB,那么该函数的极值点必然在[xA,+∞)中,若满足yA>yB,那么该函数极值点必然在(-∞,xB]中,若满足yA=yB,那么该函数的极值点必然在[xA,xB]中。

      对于任意一个下凸函数,选取函数上任意两个点A,B(xA<xB),若满足yA<yB,那么该函数的极值点必然在(-∞,xB]中,若满足yA>yB,那么该函数极值点必然在[xA,+∞)中,若满足yA=yB,那么该函数的极值点必然在[xA,xB]中。

      证明很简单,有兴趣的人可以自己证明一下。

    继续回到题目分析上来:

      有了三分法后,我们得到了解决了对于某个特定点F,如何求得最优的E点的方法,但是,问题中并没有给出F点在哪,那该怎么办?

      这时,我们可以思考这样一个问题:如果我们已知某个确定的点E,能够用三分法求出F吗,显然我们可以,那么我们就可以考虑用三分法的方法确定一个F,然后再通过这个F确定另一个E,即三分套三分,听起来很可行的样子,那么就写一下试试。

    代码部分:

    代码等下补,我先打会儿游戏。

    }

  • 相关阅读:
    AsyncTask 处理耗时操作&&显示进度条
    AutoCompleteTextView 自定义提示样式
    Android:Error:Execution failed for task ':app:clean'. > Unable to delete directory
    MaterialRefreshLayout+ListView 下拉刷新 上拉加载
    element table 表格 修改背景为透明并去除边框
    vue-element-admin 多层路由问题
    SQLServer 语句相关
    润乾报表
    v-charts
    sql 循环 ,随机数,循环插入一年数据
  • 原文地址:https://www.cnblogs.com/1-1-1-1/p/5705179.html
Copyright © 2011-2022 走看看