LA 5009 (三分法求极值) Error Curves

给出的曲线要么是开口向上的抛物线要么是直线,但所定义的F(x)的图形一定是下凸的。

注意一点就是求得是极小值,而不是横坐标,样例也很容易误导人。

 #include <cstdio>
#include <algorithm>
using namespace std; const int maxn = + ; int n;
double a[maxn], b[maxn], c[maxn]; double F(double x)
{
double ans = a[]*x*x+b[]*x+c[];
for(int i = ; i < n; i++)
ans = max(ans, a[i]*x*x+b[i]*x+c[i]);
return ans;
} int main()
{
//freopen("in.txt", "r", stdin); int T;
scanf("%d", &T);
while(T--)
{
scanf("%d", &n);
for(int i = ; i < n; i++) scanf("%lf%lf%lf", &a[i], &b[i], &c[i]);
double L = 0.0, R = 1000.0;
for(int i = ; i < ; i++)
{
double m1 = L + (R-L)/;
double m2 = R - (R-L)/;
if(F(m1) < F(m2)) R = m2;
else L = m1;
}
printf("%.4f\n", F(L));
} return ;
}

代码君

上一篇:[Javascript] Get Started with LeafletJS Mapping


下一篇:JavaScript DOM编程艺术读书笔记(四)