UVA - 1476 - Error Curves
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UVA - 1476 - Error Curves相关的知识,希望对你有一定的参考价值。
题目链接: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 }
以上是关于UVA - 1476 - Error Curves的主要内容,如果未能解决你的问题,请参考以下文章