[luogu3382]三分法(三分+秦九韶)

题目:

我是超链接

题解:

二分是什么?
二分是在一个单调的范围内找中点比较,选择走左/右
三分是什么?
三分是在一个有最优值范围内找等分三份的两个点,比较大小,每次选择舍弃区间:左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));
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值