题目:
题解:
二分是什么?
二分是在一个单调的范围内找中点比较,选择走左/右
三分是什么?
三分是在一个有最优值范围内找等分三份的两个点,比较大小,每次选择舍弃区间:左1/3OR右1/3,最后缩成一个相等的状态
至于快速求多项式的值,可以O(n)秦九韶
秦九韶算法是啥?我早还给数学老师辣
比如:
4x4+3x2+2x+1=(4x+0)x+3)x+2)x+1
4
x
4
+
3
x
2
+
2
x
+
1
=
(
4
x
+
0
)
x
+
3
)
x
+
2
)
x
+
1
这样就可以从中间开始求解辣
代码:
#include <cstdio>
using namespace std;
const double eps=1e-7;
int n;double a[20];
double qjs(double x)
{
double y=0;
for (int i=n;i>=0;i--) y=y*x+a[i];
return y;
}
double sf(double l,double r)
{
double m1,m2;
while (r-l>=eps)
{
m1=l+(r-l)/3;
m2=r-(r-l)/3;
double y1=qjs(m1),y2=qjs(m2);
if (y1<y2) l=m1;else r=m2;
}
return l;
}
int main()
{
double l,r;scanf("%d%lf%lf",&n,&l,&r);
for (int i=n;i>=0;i--) scanf("%lf",&a[i]);
printf("%.5lf",sf(l,r));
}