題意:對於函數F(x) = 6 * x^7+8*x^6+7*x^3+5*x^2-y*x,給定一個y值,求當x在1~100時F(x)的最小值。
思路:先對F(x)求導,可以看出導數單調,求出x取何值時導數爲0,則該x就是函數最小時x的取值。用二分法查找該x。
感悟:其實應該所做這樣的問題,開闊一下思維,有些題看起來很簡單,但你用的方法卻不一定是最好的,看來簡單題也有它的學問在裏面,而我最大的感悟就是,有時候模板不一定最優,雖然能及很所算法,並靈活運用的人已經可以稱作大神,但我更佩服做每道題都動腦筋尋找最優答案的人。那就努力打好基礎吧,然後做一個思維活躍的人。
AC代碼:
#include<iostream>
#include<math.h>
#include<iomanip>
using namespace std;
double f (double x,double y)
{
return 42*pow(x,6)+48*pow(x,5)+21*pow(x,2)+10*x-y;
}
double F(double x ,double y)
{
return 6*pow(x,7)+8*pow(x,6)+7*pow(x,3)+5*pow(x,2)-x*y;
}
int main()
{
int t;
double a,m,l,h;
cin>>t;
while (t--)
{
cin>>a;
l=0;h=100;
m=(l+h)/2;
while ( fabs (f(m,a))>0.00001)
{
if (f(m,a)>0)
h=m;
else
l=m;
m=(l+h)/2;
}
cout<<fixed<<setprecision(4)<<F(m,a)<<endl;
}
return 0;
}