HDU 2899 Strange fuction
这题是以水题,开始被他唬了,后来听唐聪一说又是以单调,这个函数的倒数在0-100内事单调递增的,如果Y小于0,在0时导数值是大于0的,显然这是函数一直是递增的,所以最小值在0处产生,当Y大于0,求出X使得导数值等于0(二分),此时函数取得最小值,所以又是一水题啊
#include<iostream> #include<cmath> #include<cstdlib> using namespace std; double x,y,z; inline double fax( double x ) { return 6 * pow( x, 7 ) + 8 * pow( x,6 ) + 7 * pow( x,3 ) + 5 * x * x - y * x; } inline double mini( double x ) { return 42 * pow( x,6 )+ 48 * pow( x,5 ) + 21 * x * x + 10 * x - y ; } int main( ) { int t; scanf( "%d",&t ); while( t-- ) { double min; cin>>y; if( y <= 0 ) min = 0; else { double a = 0,b = 100,mid = 50; double e1 = mini( a ),e2 = mini( mid ),e3 = mini( b ); while( fabs( e1 - e3 ) > 0.0001 ) { if( e1 * e2 < 0 ) { b = mid; e3 = e2; mid = ( a + b ) / 2; e2 = mini( mid ); } else { a = mid; e1 = e2; mid = ( a + b ) / 2; e2 = mini( mid ); } min = mid; } } printf( "%.4lf\n",fax( min ) ); } return 0; }
本人还是新手 ,转载请注明来自Lvsi‘s home