首页 > 其他 > 详细

LA5009三分法

时间:2014-02-27 20:14:18      阅读:477      评论:0      收藏:0      [点我收藏+]
bubuko.com,布布扣
 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\n",F(l));//注意最后输出的是函数值
50     }
51     return 0;
52 }
bubuko.com,布布扣

LA5009三分法,布布扣,bubuko.com

LA5009三分法

原文:http://www.cnblogs.com/little-w/p/3570277.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!