三分法
每次取两个点,把较劣的一方移动。
我的写法:
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]传送带