Uva - 1476 - Error Curves(三分)

来源:互联网 发布:淘宝拍立得功能 编辑:程序博客网 时间:2024/06/06 16:28

题意:求函数F(x) = max(S(x)) 的最小值。S(x) = a*x^2 + b*x + c(0 ≤ a ≤ 100),输入多个S(x)。

题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&category=493&problem=4222

——>>做的第一道三分题,先找出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;}


原创粉丝点击