三分法

每次取两个点,把较劣的一方移动。

我的写法:

for(int z = 1; z <= 50; z++) {
    double mid = (l + r) / 2;
    double ml = mid - (r - l) / 6, mr = mid + (r - l) / 6;
    double vl = cal(ml), vr = cal(mr);
    ans = std::min(ans, std::min(vl, vr));
    if(vl < vr) r = mr;
    else l = ml;
}

有个经典题是[SCOI2010]传送带

原文地址:https://www.cnblogs.com/huyufeifei/p/10415454.html