UVA5009 Error Curves三分

来源:互联网 发布:德州扑克 mac 编辑:程序博客网 时间:2024/05/21 14:46

题意:求一些开口向上的凹函数的最大值的最小值(不懂就仔细读两遍)

分析:一些开口向上的凹函数的最大值的最小值仍然是凹函数

求凹凸函数的最值明显用三分。详见代码,类似二分,只不过三分在中间取两个点,函数那不懂,多画图自己就能写出来。

#include<stdio.h>#include<math.h>#include<algorithm>using namespace std;int n,a[10002],b[10002],c[10002];double m1,m2,l,r,ans;double solve(double x){    int i=0;    double cont=a[0]*x*x+b[0]*x+c[0];    for(i=1;i<n;i++)       cont=max(cont,a[i]*x*x+b[i]*x+c[i]);    return cont;}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]);        }        l=0.0;r=1000.0;        for(i=0;i<100;i++)        {            m1=(l+r)/2.0;            m2=(m1+l)/2.0;            if(solve(m1)>solve(m2))            {                r=m1;            }            else l=m2;        }        ans=(l+r)/2.0;        printf("%.4lf\n",solve(ans));    }    return 0;}




原创粉丝点击