hdu 2899(数学基础+二分)

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

题意:给了你一个函数,然后给了你x的变化范围0到100,让你求出函数的最小值。

分析:它让你求的是函数的最小值,所以我们可以先对函数求导,得到的导数就可以判断函数的单调性了,求出导数后,我们发现如果函数的导数是x越大所求的的导数也就越大,

当导数一直为负数时,函数是单调递减的;当导数开始是负数,然后是正数,那说明函数开始时递减的然后是递增的,那么当导数为0时函数值肯定是最小的!我们求导数为0的

过程,我们可以用二分实现!

复制代码
#include <bits/stdc++.h>
#define eps 1e-7 //该常量为精度
#define F 6*pow(x,7)+8*pow(x,6)+7*pow(x,3)+5*pow(x,2)-y*x
#define DF 42*pow(x,6)+48*pow(x,5)+21*pow(x,2)+10*x-y //导数,函数随着x增大单调递增
using namespace std;  
int main() {
    int n;
    double y;
    double x,l,r;//x为变量
    cin>>n;    
    while(n--) {
        cin>>y;
        l=0.0;
        r=100.0;
        while(r-l>=eps) {//当x的范围小于最小精度时即代表DF最近似于0!
            x=(l+r)/2;//范围的中间值
            if(DF<0) {//当导数小于0,符合函数等于0的x一定在中间值的右边
                l=x;
            }
            else if(DF>0) {//当导数大于0,符合函数等于0的x一定在中间值的左边
                r=x;
            }
            
        }
        printf("%.4lf\n",F);
    }
}
复制代码

 其他题解:

hdu2899 (三分/二分/模拟退火):

https://blog.csdn.net/qq_34564984/article/details/70277284

 

posted @   Y鱼鱼鱼Y  阅读(289)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示