三分算法——洛谷模板P3382
类似于二分查找,三分搜索法也是比较常用的基于分治思想的高效查找方法。但是和二分不同,二分只适用于单调函数,三分用于单峰函数。
其原理就是利用两个中间点,逐渐逼近峰值。

midl和midr的值谁更大,就变动那边的边界,想中心极值点逼近。
洛谷模板3382。
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
double a[20];
int n;
double f(double x)
{
int i;
double result = 0;
double cf = 1;
for (i = 0; i <= n; i++)
{
result = result + cf * a[i];
cf = cf * x;
}
return result;
}
int main(int argc, char** argv)
{
double midl, midr;
double l, r;
int i;
cin >> n >> l >> r;
for (i = n; i >= 0; i--)
cin >> a[i];
while (abs(r - l) > 1e-6)
{
midl = (l + r) / 2;
midr = (midl + r) / 2;
if (f(midl) < f(midr))
l = midl;
else
r = midr;
}
cout << fixed << setprecision(5) << l << endl;
return 0;
}