//HDOJ 3714 Error Curves 三分搜索
/*
题意:给定一堆二元一次函数
现在定义一个函数F(x) = max(Si(x)),x is [0, 1000],S(i)表示给定的那些二元一次方程
现在求F(x)的最小值
先画图发现题目所定义的函数也是一个类似二元函数的图形 3分求极值
*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#define N 10005
int T,n;
int a[N],b[N],c[N];
double G(double x)
{
int i;
double Max,t ;
Max=a[1]*x*x+b[1]*x+c[1];
for(i=2;i<=n;i++){
t=a[i]*x*x+b[i]*x+c[i];
if(Max<t)
Max=t;
}
return Max;
}
int main(){
int i;
double l,r,mid1,mid2,ans1,ans2;
scanf("%d",&T);
while(T--){
scanf("%d",&n);
for(i = 1; i <= n; ++i)
scanf("%d %d %d",&a[i],&b[i],&c[i]);
l=0.0,r=1000.0 ;
do{
mid1=(r+l)/2;
mid2=(mid1+r)/2;
ans1=G(mid1);
ans2=G(mid2);
if(ans1>ans2)
l=mid1;
else
r=mid2;
}while(fabs(ans1-ans2)>1e-8);
printf("%0.4f\n",ans1) ;
}
return 0;
}
HDOJ 3714 Error Curves 三分搜索
最新推荐文章于 2017-12-27 21:49:12 发布