刚刚学了三分,知道了三分适用于单峰函数,刚好碰上这道2010年成都现场赛题目,就开始ac。
题意是求n个二次方程在[0,1000]里最大值中的最小值。。。额,还是看图吧

#include <list>
#include <map>
#include <set>
#include <queue>
#include <string>
#include <deque>
#include <stack>
#include <algorithm>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <limits.h>
#include <time.h>
#include <string.h>
using namespace std;
#define LL long long
#define PI acos(-1.0)
#define MAX INT_MAX
#define MIN INT_MIN
#define eps 1e-10
#define FRE freopen("a.txt","r",stdin)
#define N 26
struct node{
double a,b,c;
}p[10005];
int n;
double f(double x){
int i;
double ans=MIN;
for(i=0;i<n;i++){
ans=max(ans,p[i].a*x*x + p[i].b*x +p[i].c);
}
return ans;
}
int main(){
int t;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
int i,j;
for(i=0;i<n;i++){
scanf("%lf %lf %lf",&p[i].a,&p[i].b,&p[i].c);
}
double l=0.0,r=1000.0,mid,midmid;
while(r-l>eps){
mid=(l+r)/2.0;
midmid=(mid+r)/2.0;
if(f(mid)>f(midmid))
l=mid;
else
r=midmid;
}
printf("%.4f\n",f(mid));
}
return 0;
}
本文探讨了如何解决二次方程在指定区间内的最大值问题,并通过实例展示了算法实现过程。
375

被折叠的 条评论
为什么被折叠?



