HDU 2899 Strange fuction 三分


Now, here is a fuction:
  F(x) = 6 * x^7+8*x^6+7*x^3+5*x^2-y*x (0 <= x <=100)
Can you find the minimum value when x is between 0 and 100.

InputThe first line of the input contains an integer T(1<=T<=100) which means the number of test cases. Then T lines follow, each line has only one real numbers Y.(0 < Y <1e10)OutputJust the minimum value (accurate up to 4 decimal places),when x is between 0 and 100.Sample Input
2
100
200
Sample Output
-74.4291
-178.8534


題目的意思就是給你1個 y(0 < Y <1e10)  求F(x)的的最小值在區間[0,100]

首先觀察這個式子 顯然是先減后增的 那么兩種方法 一種是手動求個導 算x=0 用二分

我用的是三分求極值其實差不多太多,還是比較容易的。

#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
long long  y;
const double eps= 1e-6;
double calc(double x)
{
    return (6*pow(x,7)+8*pow(x,6)+7*pow(x,3)+5*pow(x,2)-y*x);
}
double three(double l,double r)
{
    double mid,midmid;
    while(l+eps<r)
    {
        mid=(l+r)/2;
        midmid=(mid+r)/2;
        if(calc(mid)<calc(midmid)) r=midmid;
        else l=mid;
    }
    return mid;
}


int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%lld",&y);
        double x = three(0.0,100.0);
        printf("%.4lf\n",calc(x));
    }
    return 0;
}



注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: