zoukankan      html  css  js  c++  java
  • 三分法及模板

    模板题:洛谷 (P3382)
    给出一个 (N) 次函数,保证在范围 ([l,r]) 内存在一点 (x) ,使得 ([l,x]) 上单调增,([x,r]) 上单调减。试求出 (x) 的值。

    好的,三分就是用来求这种单峰函数的最值
    具体求法:
    与二分很像,先把答案锁定在一个区间 ([L,R])
    接着“三”分,设 (m_1=L+(R-L)/3) , (m_2=R-(R-L)/3)
    求出这两点对应的函数值, (f(m_1),f(m_2))
    有一个结论:设 (f(m_1),f(m_2)) 中更优的为好点,更差的坏点。则最优点与好点位于坏点的同侧
    其实并不难理解,画个图分两种情况讨论即可。

    代码

    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    #include<cmath> 
    
    #define eps 1e-6
    
    using namespace std;
    
    const int N = 15;
    typedef double db;
    
    db a[N],L,R;
    int n;
    db f(db x){
        db y=a[0],X=1;
        for(int i=1;i<=n;i++)
            X*=x,y+=a[i]*X;
        return y;
    }
    
    int main()
    {
        scanf("%d%lf%lf",&n,&L,&R);
        for(int i=n;i>=0;i--) scanf("%lf",&a[i]);
        
        db l=L,r=R,m1,m2;
        while(fabs(r-l)>eps){
            m1=l+(r-l)/3.0; m2=r-(r-l)/3.0;
            if(f(m1)>f(m2)) r=m2;
            else l=m1;
        }
        printf("%.5lf
    ",l);
        
        return 0;
    }
    
    既然选择了远方,便只顾风雨兼程
  • 相关阅读:
    解决Ubuntu19.04无法安装SecureCRT
    gluster学习(二)
    gluster学习(一)
    ansible安装过程遇到的问题
    shell在linux里摇摇晃晃
    ubuntu18.10安装网易云音乐
    MVC Bundle生成的css路径问题
    Vuejs自定义select2指令
    VueJs笔记
    在webAPI的BaseController上使用RoutePrefix
  • 原文地址:https://www.cnblogs.com/lindalee/p/9807688.html
Copyright © 2011-2022 走看看