Strange fuction
题目链接:HDU - 2899
题意: F(x) = 6 * x^7+8*x^6+7*x^3+5*x^2-y*x (0 <= x <=100);给出y值,求x在0~100内F(x)的最小值是多少?
F(x)'= 42 * x^6+48*x^5+21*x^2+10*x^1-y (0 <= x <=100)
F(x)''= 262 * x^5+240*x^4+42*x^1+10 (0 <= x <=100)
由上式可知:x在0~100区间,F(x)''>0,F(x)'是单调递增的,那么可知,在该区间,F(x)'的图形是如下图一条直线 :
由图可知F(x)的图像必然是个双曲线
然后就简单了许多,三分求解就行了;
#include <bits/stdc++.h>
#define eps 1e-8
using namespace std;
double cal(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;
cin >> T;
while(T--){
double y;
cin >> y;
double l=0.0, r=100.0;
while(r-l>eps){
double mid=l+(r-l)/3;
double midd=r-(r-l)/3;
if(cal(mid, y)>cal(midd, y)) l=mid;
else r=midd;
}
printf("%.4f\n", cal(l, y));
}
return 0;
}