Problem : http://acm.hdu.edu.cn/showproblem.php?pid=2899
求函数f(x)在[0,100]上的最小值
根据f'(x)在[0,100]上单调递增的性质,运用二分搜索求f'(x)在[0,100]上的零点
#include<cstdio> double y; double f(double x){//f(x) double fx=6*x; fx=(fx+8)*x*x*x; fx=(fx+7)*x; fx=(fx+5)*x; return (fx-y)*x; } double df(double x){//f'(x) double fx=42*x; fx=(fx+48)*x*x*x; fx=(fx+21)*x; fx=(fx+10)*x; return fx-y; } int main() { int t; scanf("%d",&t); while(t--){ scanf("%lf",&y); double ans; if(df(0)>=0)ans=0; if(df(100)<=0)ans=100; if(df(0)<0 && df(100)>0){ double L=0,R=100; while(R-L>1e-6){//1e-6的值为1*10^(-6) 这个值随便取小了点 ans=(L+R)/2; if(df(ans)>0)R=ans; else L=ans; } } printf("%.4lf ",f(ans)); } return 0; }
数学课上没教过,那是老师的错.....黑黑