hdu 2899(数学基础+二分)
题意:给了你一个函数,然后给了你x的变化范围,让你求出函数的最小值。
分析:它让你求的是函数的最小值,所以我们可以先对函数求导,得到的导数就可以判断函数的单调性了,求出导数后,我们发现如果函数的导数是x越大所求的的导数也就越大,
当导数一直为负数时,函数是单调递减的;当导数开始是负数,然后是正数,那说明函数开始时递减的然后是递增的,那么当导数为0时函数值肯定是最小的!我们求导数为0的
过程,我们可以用二分实现!
代码实现:
#include<stdio.h> #include<string.h> #include<math.h> #define eps 1e-8 double g(double x) { return 42*pow(x,6)+48*pow(x,5)+21*pow(x,2)+10*x; } double f(double x) { return 6*pow(x,7)+8*pow(x,6)+7*pow(x,3)+5*pow(x,2); } int main() { int T; double y,l,r,mid; scanf("%d",&T); while(T--) { scanf("%lf",&y); if(g(100.00)-y<=0) printf("%.4lf\n",f(100.00)-y*100.00); else { l=0;r=100; while(l+eps<=r) { mid=(l+r)/2; if(g(mid)-y<0) l=mid; else if(g(mid)-y>0) r=mid; else if(g(mid)-y<eps) break; } printf("%.4lf\n",f(mid)-y*mid); } } return 0; }
posted on 2013-10-01 21:12 后端bug开发工程师 阅读(335) 评论(0) 编辑 收藏 举报