根据题意可得F(x)为单谷函数,所以使用三分法求解。
#include<bits/stdc++.h>
using namespace std;
double t,n,a[10010]={0},b[10010]={0},c[10010]={0},ans;
const double ee=1e-9;//保持精度使用
double fm(double x);
int main()
{
cin>>t;
for(int i=0;i<t;i++)
{
double l=0,r=1000;
cin>>n;
for(int j=0;j<n;j++)
{
cin>>a[j]>>b[j]>>c[j];
}
while(r-l>ee)
{
double k=(r-l)/3.0;
double mid1=l+k;
double mid2=r-k;
if(fm(mid2)>fm(mid1))
{
r=mid2;
}
else
{
l=mid1;
}
}
printf("%.4f\n",fm(l));
}
}
double fm(double x)//求解F(x)的函数
{
double ans=-1e9;
for(int i=0;i<n;i++)
{
ans=max(ans,a[i]*x*x+b[i]*x+c[i]);
}
return ans;
}

京公网安备 11010502036488号