码迷,mamicode.com
首页 > 其他好文 > 详细

P3382|三分法模板

时间:2020-02-14 21:01:12      阅读:57      评论:0      收藏:0      [点我收藏+]

标签:cin   ble   --   模板   while   循环   等于   using   最大   

三分法求极值

其实就是每次取左右边界的中点,(然后中点稍微左偏一点、再中点往右偏一点,相等于缩小了区间)
再然后
如果求极大值:如果左边界函数值 <= 右边界函数值(说明还没到极值点),R = mid;否则L = mid;
如果求极小值:如果左边界函数值 >= 右边界函数值(说明还没到极值点),L = mid;否则R = mid;

#include<bits/stdc++.h>
using namespace std;

const double eps=1e-6;
int n;
double L,R;
double a[15];

double check(double x){
    double sum = 0;
    //1层循环:求多项式的值 从幂最大(从左往右)求多项式每次累乘1个x  
    for(int i=n;i>=0;i--) sum = sum*x+a[i];
    return sum;
} 

int main(){
    cin>>n>>L>>R;
    for(int i=n;i>=0;i--) cin>>a[i];
    while(L + eps < R){
        double mid = (L+R)/2;
        if(check(mid+eps) <= check(mid-eps))
            R = mid;
        else
            L = mid;
    }
    printf("%.5lf",R);
    return 0;
} 

P3382|三分法模板

标签:cin   ble   --   模板   while   循环   等于   using   最大   

原文地址:https://www.cnblogs.com/fisherss/p/12308587.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!