码迷,mamicode.com
首页 > 其他好文 > 详细

UVA - 1476 - Error Curves

时间:2017-08-27 12:04:16      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:turn   pen   for   a*   err   one   div   amp   details   

题目链接:UVA - 1476

题目大意:

寻找函数F(X)的最低点。

已经f(x) = ax2 + bx + c

F(x) = max(Si(x)), i = 1 . . . n.

题目分析:

可以使用三分来进行查找。

二分可以用于查找单调递增或者单调递减的函数,

三分可以用于查找一个凸(凹)性函数,即函数一边不严格单调递增,一边不严格单调递减。

这里mark一个讲三分的博客:

三分查找

给出代码:

技术分享
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cmath>
 4 using namespace std;
 5 //char s[1000000+10];
 6 int n;
 7 struct node
 8 {
 9     double a;
10     double b;
11     double c;
12 }nodes[10000+10];
13 double f(double x)
14 {
15    double s=10001*(-1);
16    //cout<<x<<endl;
17    for(int i=0;i<n;i++)
18    {
19        //double h=
20        double t=nodes[i].a*(x*x)+nodes[i].b*x+nodes[i].c;
21        if(t>s)
22         s=t;
23    }
24    //cout<<s<<endl;
25    return s;
26 }
27 int main()
28 {
29     int T;
30     cin>>T;
31     while(T--)
32     {
33         scanf("%d",&n);
34         for(int i=0;i<n;i++)
35         {
36             scanf("%lf%lf%lf",&nodes[i].a,&nodes[i].b,&nodes[i].c);
37         }
38         double l=0;
39         double r=1010;
40         for(int i=0;i<100;i++)
41         {
42             double mid=(l+r)/2;
43             double midd=(mid+r)/2;
44             if(f(mid)<f(midd))
45                 r=midd;
46             else
47                 l=mid;
48         }
49         //cout<<f(l)<<endl;
50         printf("%.4lf\n",f(l));
51     }
52     return 0;
53 }
View Code

 

UVA - 1476 - Error Curves

标签:turn   pen   for   a*   err   one   div   amp   details   

原文地址:http://www.cnblogs.com/DLKKILL/p/7439759.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!