• Hdu 2899 Strange fuction二分法


    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2899

    //多项式求导可以减少乘法的计算次数
    //找出f(x)的最小值
    //可证明f(x)在0-x0单调递减,在x0-100单调递增
    
    //题目转化为求f(x)的极值点x0
    //即f'(x)的零点x0
    //显然f'(x)递增
    //用二分法求零点
    //直到右边界-左边界<1e-8(貌似要开到1e-6才不会有错)
    //要注意分类讨论
    
    #include<iostream>
    #include<iomanip>
    #include<cmath>
    using namespace std;
    #define INFINI 1<<31
    
    int t;
    double y;
    double ans;
    
    double cal(double x){
        return 42*pow(x,6)+48*pow(x,5)+21*x*x+10*x-y;
    }
    
    double f(double x){
        return 6*pow(x,7)+8*pow(x,6)+7*pow(x,3)+5*x*x-y*x;
    }
    
    double lt,rt,mid;
    //f'(0)=-y
    //f(0)=0
    
    int main (){
    
        cin>>t;
        while(t--){
            cin>>y;
            
            if(y<=0)             //x0<=0
                ans=0;
            if(cal(100)<=0)        //x0>=100
                ans=f(100);
    
            // 0<x0<100
            lt=0;
            rt=100;
            
            while(rt-lt>1e-8)
            {
                mid=(lt+rt)/2;
                double temp=cal(mid);
                if(temp>0)
                    rt=mid;
                else if(temp<0)
                    lt=mid;
                else                     //此时mid为极值点
                    rt=lt=mid;
            }
            cout<<fixed<<setprecision(4);
            cout<<f(mid)<<endl;
        }
        return 0;
    }
  • 相关阅读:
    LeetCode
    LeetCode
    LeetCode OJ
    LeetCode OJ
    LeetCode OJ
    关于if和else和switch case的用法和程序编码操作过程
    关于java的特点
    关于JAVA的数据类型
    关于java的学习
    力扣482. 密钥字符串 S python--每天一题
  • 原文地址:https://www.cnblogs.com/neverchanje/p/3536758.html
Copyright © 2020-2023  润新知