三分模板(黄金分割求最值)

题目

三分模板(黄金分割求最值)

时间复杂度:\(O(Tn)\)

#include<bits/stdc++.h>
using namespace std;
const double gold=(sqrt(5)-1)/2;//黄金分割
const double eps=1e-9;//一般题目要求精度+2(本题不是)
int T,n,a[10005],b[10005],c[10005];
double l,r;
double F(double x){//求多项式和
	double mx=-INT_MAX;//初始化极小值
	for(int i=1;i<=n;i++){
		mx=max(mx,a[i]*x*x+b[i]*x+c[i]);
	}
	return mx;
}
int main(){
	ios::sync_with_stdio(0);cin.tie(0);
	cin>>T;
	while(T--){
		cin>>n;
		for(int i=1;i<=n;i++){
			cin>>a[i]>>b[i]>>c[i];
		}
		l=0,r=1000;
		while(r-l>eps){  
			double Gold=(r-l)*gold; //区间黄金分割点
			double rmid=l+Gold,lmid=r-Gold;
			if(F(lmid)<F(rmid)) r=rmid;
			else l=lmid;
		}
		cout<<fixed<<setprecision(4)<<F(l)<<'\n';
	}
	return 0;
}
posted @ 2026-08-07 08:00  decentz  阅读(5)  评论(0)    收藏  举报