HDU 2899 三分

  我们对这个函数求二阶导数,发现他的二阶导数是恒大于0的,那么他的导数是单调的,且在某时刻为0,那么这时的x值就是极值处的x值,其实题目说了,有最小值,那么我们三分水过去就好了。

  反思:精度不够,因为是log3的,所以的40次循环就WA,50次就可以A。

//By BLADEVIL
#include <iostream>
#include <cstdio>

using namespace std;

int task;
double y;

double f(double x) {
    return (6*x*x*x*x*x*x*x+8*x*x*x*x*x*x+7*x*x*x+5*x*x-y*x);
}

int main() {
    scanf("%d",&task);
    while (task--) {
        cin>>y;
        double l=0,r=100;
        for (int i=1;i<=50;i++) {
            double mid1=l+(r-l)/3,mid2=mid1+(r-l)/3;
            if (f(mid1)>f(mid2)) l=mid1; else r=mid2; 
        }
        printf("%.4f\n",f(l));
    }
    return 0;
}

 

posted on 2014-03-11 17:08  BLADEVIL  阅读(173)  评论(0编辑  收藏  举报