zoukankan      html  css  js  c++  java
  • 湘潭大学 Hurry Up 三分,求凹函数的最小值问题

    题目来源:

    http://202.197.224.59/OnlineJudge2/index.php/Problem/read/id/1175

    分析:

    起点和终点, 从起点跑到x轴,然后再从x轴某处到终点坐出租车,求最短时间,此函数为 f(x)。 然后再和直接从起点到终点的时间比较,求最小。

    由此,我们知道 f(x)是一个 凹函数,用三分的方法。

    代码如下:

    const double EPS=1e-9;
    double xs,ys,xe,ye,vr,vt;
    double f(double x)
    {
        return sqrt( (xs-x)*(xs-x) + ys*ys ) / vr
             + sqrt( (x-xe)*(x-xe) + ye*ye ) / vt;
    }
    //三分 对凹(凸)函数判断最小(大)值,此题是求最小值。
    //不要求左l右r值的大小比较,即(L<R 或 L>=R)都可
    double tri_search(){
        double Mid , Midmid,L,R;
        L= xs;
        R=xe;
        while( fabs(L-R) > EPS ){ // 由于L ,R没有要求谁大谁小,故求的绝对值
            Mid=(L+R)*0.5;
            Midmid=(Mid+R)*0.5;
            if(f(Mid)<= f(Midmid)  )
                    R=Midmid;
            else
                L=Mid;
        }
        return (L+R)*0.5;
    }
    int  main(){
        int t;
        cin>>t;
        while(t--){
            cin>>xs>>ys>>xe>>ye>>vr>>vt;
            double ans=sqrt( (xs-xe)*(xs-xe) + (ys-ye)*(ys-ye)) / vr;
            double x=tri_search();
            ans=min(ans, f(x));
            printf("%.2lf
    ",ans);
        }
         return 0 ;
    }
  • 相关阅读:
    oracle 闪回操作--区别于快照
    easyui 低版本下拉多选框绑定onChange事件样式失真问题
    kvm虚拟机网络配置-网桥
    CentOS7.5使用KVM创建虚拟机
    梦醒时分
    姑娘
    Ventoy+WePE 装机教程
    PG-SSL安全配置
    转载-如何做一份完善的补丁分析
    网络流24题部分题解
  • 原文地址:https://www.cnblogs.com/zn505119020/p/3654291.html
Copyright © 2011-2022 走看看