开始算法基础学习的第一天

今天学习的内容是三分搜索 相对来说很基础的内容(还是觉得脑子不够用)

三分搜索主要用于凸函数查找极大值。

(盗个图)

如图所示 若要查找该函数的最大值 可以考虑和二分法一样的思路,即用L,R两个端点去不断地逼近这个最大点

但是在这里仅用一个mid中值是不够的 因此添加了一个mmid = (mid+R)/2 判断函数在mid和mmid两点的大小就可以进一步判断极值存在于哪一段中

用一个便于理解的办法,我们分成以下两种情况来讨论:

1.mid,mmid在最大值的同一侧:这时更大的那个值更接近极值 比如mid>mmid那么就可以确定(mmid,R)区间内肯定没有极值,因此抛弃它

2.mid,mmid在最大值的两侧:依然是更大的那个值更接近极值 比如mid>mmid那么也可以确定(mmid,R)区间内肯定没有极值

综上 我们判断mid,mmid两点函数值的大小来缩短区间 逼近极值点(具体见代码)

/*三分搜索实例--ZOJ3203:LightBulb*/
# include<iostream> using namespace std; const double EPS = 1e-;//设定精度 double D, H, h;//为了方便计算写成了全局变量 double calc(double x)
{
return (D - x) + H - D*(H - h) / x;
}//clac函数。根据几何关系推导。 double ternarysearch(double l, double r)
{
double mid,mmid; while (l + EPS < r)
{
mid = (l + r) / ;
mmid = (mid + r) / ; double mid_value = calc(mid);
double mmid_value = calc(mmid); if (mid_value > mmid_value)
r = mmid;
else
l = mid;
} return l;
}//三分搜索主体部分 int main()
{
int T;
double target; cin >> T; while (T--)
{
cin >> H >> h >> D; target = ternarysearch(D-D*h/H,D);//注意开始的两个点的取值 printf("%.3f\n", calc(target)); } return ;
}

对于一道题目 关键还是写出calc函数。。

三分搜索-ZOJ LightBulb的更多相关文章

  1. hdu 4355 Party All the Time(三分搜索)

    Problem Description In the Dark forest, there is a Fairy kingdom where all the spirits will go toget ...

  2. Weakness and Poorness CodeForces - 578C 三分搜索 (精度!)

    You are given a sequence of n integers a1, a2, ..., an. Determine a real number x such that the weak ...

  3. Codeforces Gym101246J:Buoys(三分搜索)

    http://codeforces.com/gym/101246/problem/J 题意:给出n个点坐标,要使这些点间距相同的话,就要移动这些点,问最少的需要的移动距离是多少,并输出移动后的坐标. ...

  4. Codeforces 782B:The Meeting Place Cannot Be Changed(三分搜索)

    http://codeforces.com/contest/782/problem/B 题意:有n个人,每个人有一个位置和速度,现在要让这n个人都走到同一个位置,问最少需要的时间是多少. 思路:看上去 ...

  5. [ACM_搜索] ZOJ 1103 || POJ 2415 Hike on a Graph (带条件移动3盘子到同一位置的最少步数 广搜)

    Description "Hike on a Graph" is a game that is played on a board on which an undirected g ...

  6. 三分套三分 --- HDU 3400 Line belt

    Line belt Problem's Link:   http://acm.hdu.edu.cn/showproblem.php?pid=3400 Mean: 给出两条平行的线段AB, CD,然后一 ...

  7. poj 3301 Texas Trip(几何+三分)

    Description After a day trip with his friend Dick, Harry noticed a strange pattern of tiny holes in ...

  8. hdu3756 三分求最小圆锥

    题意:       让你找到一个最小的圆柱去覆盖所有的竖直的线段.. 思路:       三分,直接去三分他的半径,因为想下,如果某个半径是最优值,那么 从R(MAX->now->MIN) ...

  9. Soj题目分类

    -----------------------------最优化问题------------------------------------- ----------------------常规动态规划 ...

随机推荐

  1. unity, copy-paste component

    然后到要粘贴的地方,点弹出下拉菜单,如图: 得到:

  2. EF操作VS中

    1.安装mysql server 2.安装MySql的VS插件(版本请下载最新版,百度自己搜索,这个不用多说)mysql-for-visualstudio-1.2.3.msi 3.安装用于.net连接 ...

  3. 【Android】14.3 浏览手机中的所有文件夹和文件

    分类:C#.Android.VS2015: 创建日期:2016-02-27 一.简介 前面我们了解了内部存储.外部存储的含义,用一句话说,内部存储实际上是保存在"data"文件夹下 ...

  4. wget镜像网站并且下载到指定目录 2012-06-20 19:40:56

    wget镜像网站并且下载到指定目录 2012-06-20 19:40:56 分类: Python/Ruby wget -r -p -np -k -P /tmp/ap http://www.exampl ...

  5. Ubuntu/Debian交叉编译安装ARM平台版本的ffmpeg

    1 准备工作 (1)libmp3lame库 下载:    wget http://downloads.sourceforge.net/lame/lame-3.99.tar.gz 解压 编译:./con ...

  6. 使用JSON Web Tokens和Spring实现微服务

    http://www.jdon.com/dl/best/json-web-tokens-spring-cloud-microservices.html

  7. 【转】CentOS下expect 安装

      Expect是在Tcl基础上创建起来的,它还提供了一些Tcl所没有的命令,它可以用来做一些linux下无法做到交互的一些命令操作,在远程管理方面发挥很大的作用. spawn命令激活一个Unix程序 ...

  8. javaweb reponse 写出文件

    Map map = getSearchValue(); File excelFile = orderService.getexportexcel(id,map); InputStream is = n ...

  9. 等边三角形---dfs

    蒜头君手上有一些小木棍,它们长短不一,蒜头君想用这些木棍拼出一个等边三角形,并且每根木棍都要用到. 例如,蒜头君手上有长度为 11,22,33,33 的4根木棍,他可以让长度为11,22 的木棍组成一 ...

  10. NSURLErrorDomain Code=-999(转)

    原文:http://www.henishuo.com/nsurlerrordomain-code-999/ 前言 今天有一个线上bug,是分配给提供H5的团队的,但是后台查不出来原因.于是让前端iOS ...