hdu2899 简单数学+二分+三分
二分思想 了解二分与三分的适用情况
二分代码:
#include<iostream> #include<cmath> #include<cstdio> using namespace std; const double b=1e-6; double f(double x) { return 42*pow(x,6)+48*pow(x,5)+21*pow(x,2)+10*x; } double F(double x,double y) { return 6*pow(x,7)+8*pow(x,6)+7*pow(x,3)+5*pow(x,2)-y*x; } int main() { int T; double x,y,l,r; cin>>T; while(T--) { cin>>y; if(f(100)<=y) { printf("%.4lf\n",F(100,y)); } else { l=0;r=100; while(r-l>b) { if(f((r+l)/2)>y) r=(r+l)/2; else l=(r+l)/2; } printf("%.4lf\n",F(l,y)); } } return 0; }
三分代码:
#include<iostream> #include<cmath> #include<cstdio> using namespace std; const double b=1e-6; double F(double x,double y) { return 6*pow(x,7)+8*pow(x,6)+7*pow(x,3)+5*pow(x,2)-y*x; } int main() { int T; double l,r,lm,rm,y; cin>>T; while(T--) { cin>>y; l=0;r=100; while(r-l>b) { lm=(2*l+r)/3; rm=(l+2*r)/3; if(F(lm,y)>F(rm,y)) l=lm; else r=rm; } printf("%.4lf\n",F(l,y)); } return 0; }