题目大意:求方程f(x)=6 * x^7+8*x^6+7*x^3+5*x^2-y*x (0 <= x <=100)在x属于0到100时的最小值
思路:f'(x)=42*x^6+48*x^5+21*x^2+10*x-y,f''(x)=252x^5+240*x^4+42*x+10,在x属于0到100的范围内,f''(x)恒大于0,所以f'(x)的图像是一条单增的直线,且在最小值x=0处,f'(x)=-y,,y>0,所以f'(x)的图像一定穿过x轴,那么f(x)的最小值一定就在f'(x)=0的时候,通过二分查找f'(x)=0的点即可
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t;
cin >> t;
while (t--)
{
double y;
cin >> y;
double l = 0, r = 100,mid;
while (l <= r - 0.0000001)
{
mid = (l + r)/2 ;
if ((42 * pow(mid, 6) + 48 * pow(mid, 5) + 21 * pow(mid, 2) + 10 * mid - y) > 0)//f'(x)大于0,最值点应该小于当前的x
r = mid;
else
l = mid;//反之应该大于当前的x
}
cout << fixed << setprecision(4) << 6 * pow(mid,7) + 8 * pow(mid,6) + 7 * pow(mid,3) + 5 * pow(mid,2) - y * mid << endl;
}
return 0;
}