题意:求 F(x) = 6 * x^7+8 * x^6+7 * x^3+5 * x^2-y * x (0 <= x <=100)的最小值
最值找导函数零点~
F′(x)=42∗x6+48∗x5+21∗x2+10∗x−y
因为
F′′(x)=a∗x5+b∗x4+c∗x+10(a,b,c>0)
x∈[0,100]
时
F′′(x)>0
所以
F′(x)
单增,只有一个零点
所以二分求
F′(x)
的零点带入原
F(x)
即可
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
typedef long long ll;
#define F(x) 6*pow(x,7)+8*pow(x,6)+7*pow(x,3)+5*pow(x,2)-y*x
#define DF(x) 42*pow(x,6)+48*pow(x,5)+21*pow(x,2)+10*x-y
const double eps=1e-10;
int main(){
int t;
scanf("%d",&t);
while(t--){
ll y;
double minV=F(0.0);
scanf("%lld",&y);
double l=0.0,r=100.0,m=0.0;
while(r-l>eps){
m=(l+r)/2.0;
if(DF(m)>eps){
r=m-eps;
}
else{
l=m+eps;
}
}
printf("%.4f\n",F(m));
}
}