zoukankan      html  css  js  c++  java
  • #10013一本通1.2例3

    三分

    信奥书P26。

    三分算法适用范围:主要解决凸性函数的极值问题(不断缩小所求区间)。、

    三分模板

    (适用:上凸单峰函数)

        double L=0,R=1e9;
        while(L+1e-3<=R) // while(R-L>=1e-3)
        {
            double m1=L+(R-L)/3,m2=R-(R-L)/3;
            if(f(m1)<f[m2]) l=m1;
            else r=m2;
        }
    

    注意

    本题需要注意的问题是:

    1. R和L之间的差值写10的-3会wa,要写更小一点,不如10的-11;

    2. 这题和三分模板的区别在于,上面的三分模板针对于上凸函数,而本题是下凸函数,所以L和R更新的时候注意一下更新的代码内容。

    AC代码

    #include<stdio.h>
    #include<iostream>
    #include<string.h>
    #include<algorithm>
    #include<map>
    #include<cmath>
    #include<queue>
    using namespace std;
    typedef long long ll;
    #define inf 0x3f3f3f3f
    
    const int N=50100;
    int n,a[N],b[N],c[N];
    
    double f(double x)
    {
        double ma=(-inf)*1.0;
        for(int i=0;i<n;i++)
            ma=max(ma,a[i]*x*x+b[i]*x+c[i]);
        return ma;
    }
    
    int main()
    {
        int T;
        cin>>T;
        while(T--)
        {
            cin>>n;
            for(int i=0;i<n;i++)
                cin>>a[i]>>b[i]>>c[i];
            double L=0,R=1000;
            while(L+1e-11<=R) // 1e-3wa
            {
                double m1=L+(R-L)/3,m2=R-(R-L)/3;
                if(f(m1)<=f(m2)) R=m2;//L=m1;
                else L=m1;//R=m2;
            }
            printf("%.4lf
    ",f(L));
        }
        return 0;
    }
    
  • 相关阅读:
    HEC-ResSim原文档
    水文模型大全
    用word发布博客到博客园
    给你的浏览器标题栏加上小图标
    系统性能调优必知必会学习
    系统性能调优必知必会学习
    容器化学习
    Redisson学习
    mysql回顾
    事物、源码学习,spring-tx
  • 原文地址:https://www.cnblogs.com/OFSHK/p/13867806.html
Copyright © 2011-2022 走看看