zoukankan      html  css  js  c++  java
  • 洛谷 P3382 【模板】三分法

    原题
    三分法,记个模板。
    以单峰函数f为例,我们要求极大值点 x ,可以在定义域 [l,r] 上取两个三等分点 lmid , rmid ,把函数分为三段。

    1. f(lmid) < f(rmid),可令 l = lmid
    2. f(lmid) > f(rmid),可令 r = rmid
    3. f(lmid) = f(rmid), l = lmid 或 r = rmid 均可

    AC代码

    #include<bits/stdc++.h>
    using namespace std;
    const double eps=1e-6;
    double a[20];
    double fac(double x,int r)
    {
       double ans=1;
       for(int i=1;i<=r;i++)
        ans*=x;
       return ans;
    }
    double check(double x,int n)
    {
        int i=1;
       double ans=0;
       for(int i=1;i<=n+1;i++)
       ans+=a[i]*fac(x,n-i+1);
       return ans;
    }
    int main()
    {
        int n;
        double l,r;
        cin>>n>>l>>r;
        for(int i=1;i<=n+1;i++)
            cin>>a[i];
        while(r-l>eps)
        {
          double lmid=l+(r-l)/3.0,rmid=r-(r-l)/3.0;
          if(check(lmid,n)<=check(rmid,n))
            l=lmid;
          else
            r=rmid;
        }
        printf("%.5lf",l);
    return 0;
    }
    
    

    这个%f输出真是让人搞不懂,%lf就出来一堆奇怪的东西

    戒骄戒躁,百炼成钢!
  • 相关阅读:
    我罗斯方块最终篇
    我罗斯汇报作业一
    11组-Alpha冲刺-2/6
    11组-Alpha冲刺-1/6
    结对编程作业
    11组 团队展示
    第一次个人编程作业
    第一次博客作业
    寒假作业3
    寒假作业2
  • 原文地址:https://www.cnblogs.com/Pecoz/p/12522752.html
Copyright © 2011-2022 走看看