三分的介绍百度有很多,就贴一下代码
int SanFen(int l,int r) //找凸点
{
while(l < r-1)
{
int mid = (l+r)/2;
int mmid = (mid+r)/2;
if( f(mid) > f(mmid) )
r = mmid;
else
l = mid;
}
return f(l) > f(r) ? l : r;
}
三分可以用来求解一系列极值问题。
会二分其实三分写法就很简单。
三分的难点就在于看出是个三分 然后利用数学物理公式来求解
最近做了个训练题uvalive6694
可以说是个比较简单的三分,也可以看成三分转二分,先枚举一个然后再二分。
但是我就是看不出这是个三分
还是这个6694
这题虽然当时补了,但是最近拿出来就完全不会了。(隔了一个月)
有了点收获,想的时候应该大家都有这种直觉,就是尽量小的多一点在一起,然后大的少一点,确实是这样,然后联系一下求最小值,那么他应该两边就都比他大,那应该想到三分求极值。所以我估摸着以后求极值,一个是先往三分上想,然后多练点自己的思维。