栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

2021-10-05 二分三分算法 求解最小值 传送带(951G)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2021-10-05 二分三分算法 求解最小值 传送带(951G)

                                             传送带  951G
来源:牛客网
 

 

题目描述

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

输入描述:
输入数据第一行是4个整数,表示A和B的坐标,分别为Ax,Ay,Bx,ByA_x,A_y,B_x,B_yAx​,Ay​,Bx​,By​;
第二行是4个整数,表示C和D的坐标,分别为Cx,Cy,Dx,DyC_x,C_y,D_x,D_yCx​,Cy​,Dx​,Dy​,;
第三行是3个整数,分别是P,Q,R。
输出描述:
输出数据为一行,表示lxhgww从A点走到D点的最短时间,保留到小数点后2位。

示例1

输入

复制0 0 0 100 100 0 100 100 2 2 1

0 0 0 100
100 0 100 100
2 2 1
输出

复制136.60

136.60
完整代码
#include
#include
#include
#include
#include
using namespace std;
struct Node{
    double x,y;
}a,b,c,d;

double x1,ya,x2,y2,x3,y3,x4,y4;
double p,q,r;

double dis(double xx,double yy,double xxx,double yyy)
{
    return sqrt((xxx-xx)*(xxx-xx)+(yyy-yy)*(yyy-yy));
}

double min(double ex,double ey)
{
    double sum=(dis(x1,ya,ex,ey))/p;
    double midx,midy,mid2x,mid2y;
    
    
    for(int i=0;i<100;i++)
    {
        midx=(c.x+d.x)/2;
        midy=(c.y+d.y)/2;
        mid2x=(midx+d.x)/2;
        mid2y=(midy+d.y)/2;
        if(  dis(ex,ey,midx,midy)/r+dis(midx,midy,x4,y4)/q   >a.x>>a.y>>b.x>>b.y;
    cin>>c.x>>c.y>>d.x>>d.y;
    x1=a.x;
    ya=a.y;
    x2=b.x;
    y2=b.y;
    x3=c.x;
    y3=c.y;
    x4=d.x;
    y4=d.y;
    cin>>p>>q>>r;
    double midx,midy,mid2x,mid2y;
    for(int i=0;i<100;i++)
    {
        midx=(a.x+b.x)/2;
        midy=(a.y+b.y)/2;
        mid2x=(midx+b.x)/2;
        mid2y=(midy+b.y)/2;
        if(    min(midx,midy)< min(mid2x,mid2y))
        {
            b.x=mid2x;
            b.y=mid2y;
        }
        else
        {
            a.x=midx;
            a.y=midy;
        }
    }
   
     printf("%.2fn",min(a.x,a.y));
    return 0;
    
}
算法思路

1.二分三分算法:

最常见的二分算法是折半查找,作用:求解一个单调函数的零点;

三分算法

作用:求解一个在一个区间内凹凸函数的极大(小)值

用途:求有俩个变量的函数的最大或最小的(传送带即为这样的问题),假设一个变量为定植求              最 大(小)值,再假设另一个值为定制,求最大(小)问题,然后综合即为最大(小)值。

具体实现:

 三分算法也是一种暴力查找法,查找到无限趋近于最好的情况。

2.传送带问题:

 其中main函数则为确定了F的位置求E变的最小值,min函数为E为定植,改变F的位置求最小值。

                                                                                                  一起敲代码,每日一分享(JN)


 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/298106.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号