三分法求解凸函数最值问题!!! 第一次用三分解决问题,这题其实是很水的题,但前提是这道用三分法求解凸函数最值; 否这没法想!!!WA一次,在于但是吧精度弄小了!!! 凸函数的max还是凸函数,要求目标凸函数的最小值只要三分就可以了 #include<iostream> #include<stdio.h> #define ESP 1e-9 using namespace std; int n; double a[10002],b[10002],c[10002]; double MAXfunction(double m) { double MAX=-99999999.0; for(int i=0;i<n;i++) { double temp=a[i]*m*m+b[i]*m+c[i]; if(temp>MAX) MAX=temp; } return MAX; } int main() { int T; scanf("%d",&T); while(T--) { scanf("%d",&n); for(int i=0;i<n;i++) scanf("%lf%lf%lf",&a[i],&b[i],&c[i]); double left=0.0,rigth=1000.0,lmid,rmid; double lmidvalue; double rmidvalue; while(left+ESP<rigth) { lmid=(left+rigth)/2; rmid=(lmid+rigth)/2; lmidvalue=MAXfunction(lmid); rmidvalue=MAXfunction(rmid); if(lmidvalue<=rmidvalue) { rigth=rmid; } else left=lmid; } printf("%.4lf/n",lmidvalue); } return 0; }