对x的坐标三分;
1 #include<cstdio> 2 #include<algorithm> 3 #define maxn 10009 4 using namespace std; 5 double a[maxn],b[maxn],c[maxn]; 6 int n; 7 double f(double x) 8 { 9 double ans=-999999999.0,t; 10 for(int i=0;i<n;i++) 11 { 12 t=a[i]*x*x+b[i]*x+c[i]; 13 ans=max(ans,t); 14 } 15 return ans; 16 } 17 18 int main() 19 { 20 int t; 21 scanf("%d",&t); 22 while(t--) 23 { 24 scanf("%d",&n); 25 for(int i=0;i<n;i++) 26 { 27 scanf("%lf%lf%lf",&a[i],&b[i],&c[i]); 28 } 29 double l=0,r=1000; 30 for(int i=0;i<500;i++) 31 { 32 double m1=l+(r-l)/3; 33 double m2=r-(r-l)/3; 34 if(f(m1)<f(m2))r=m2; 35 else l=m1; 36 } 37 printf("%.4lf ",f(l)); 38 } 39 return 0; 40 }