zoukankan      html  css  js  c++  java
  • LA5009三分法

     1 /*LA5009:
     2 定义 fi(x)=a[i]*x^2+b[i]*x+c[i](a[i]>=0),F(x)=max(fi(x)),0<=x<=1000
     3 求F(x)在区间上的最小值
     4 三分法模板题:总结一下:
     5 1、三分法适用类型,a:凹函数的最大值的最小值,b:凸函数的最小值的最大值。
     6 必须是单峰函数啊
     7 2、特点:升维,记住三分法不是用来解零点的
     8 3、解法:a类型,取三分点m1,m2,m1<m2,若F(m1)<F(m2) 则 解在(l,m2)上 ,否则在(m1,r)上
     9         b类型,解在靠近大的值得区间上
    10 */
    11 #include<iostream>
    12 #include<stdio.h>
    13 #include<string.h>
    14 #include<algorithm>
    15 #include<stdlib.h>
    16 #include<cmath>
    17 #include<queue>
    18 #include<vector>
    19 #include<map>
    20 #define eps 1e-10
    21 #define LL long long
    22 using namespace std;
    23 int n,T;
    24 double a[10000+5],b[10000+5],c[10000+5];
    25 double f(int i,double x)
    26 {
    27     return a[i]*x*x+b[i]*x+c[i];
    28 }
    29 
    30 double F(double x)
    31 {
    32     double m=f(0,x);
    33     for(int i=1;i<n;i++) m=max(m,f(i,x));
    34     return m;
    35 }
    36 int main()
    37 {
    38     cin>>T;
    39     for(int cas=1;cas<=T;cas++)
    40     {
    41         cin>>n;
    42         for(int i=0;i<n;i++) cin>>a[i]>>b[i]>>c[i];
    43         double l=0,r=1000;
    44         while(r-l>eps)
    45         {
    46             double m1=l+(r-l)/3,m2=m1+(r-l)/3;
    47             if (F(m1)<F(m2)) r=m2;else l=m1;
    48         }
    49         printf("%.4lf
    ",F(l));//注意最后输出的是函数值
    50     }
    51     return 0;
    52 }
  • 相关阅读:
    docker-machine create ,,,
    docker run with zabbix3.0
    mysql 官网
    取模性质
    欧涛最短路【记录最短路径】
    P4568 飞行路线【分层图最短路】
    CCF201403 无线网络【限制型最短路】
    POJ2449 【第k短路/A*】
    Feeding Time 【bfs求最大连通块】
    printf特殊用法
  • 原文地址:https://www.cnblogs.com/little-w/p/3570277.html
Copyright © 2011-2022 走看看