题意:求函数F(x) = max(S(x)) 的最小值。S(x) = a*x^2 + b*x + c(0 ≤ a ≤ 100),输入多个S(x)。
——>>做的第一道三分题,先找出F(x),然后三分,迭代100次。
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn = 10000 + 10;
int a[maxn], b[maxn], c[maxn], n;
double F(double x)
{
double ret = a[0]*x*x + b[0]*x + c[0];
for(int i = 1; i < n; i++)
ret = max(ret, a[i]*x*x + b[i]*x + c[i]);
return ret;
}
int main()
{
int T, i;
scanf("%d", &T);
while(T--)
{
scanf("%d", &n);
for(i = 0; i < n; i++) scanf("%d%d%d", &a[i], &b[i], &c[i]);
double L = 0.0, R = 1000.0, m1, m2;
for(i = 0; i < 100; i++)
{
m1 = L + (R-L)/3;
m2 = R - (R-L)/3;
if(F(m1) < F(m2)) R = m2;
else L = m1;
}
printf("%.4lf\n", F(L));
}
return 0;
}