码迷,mamicode.com
首页 > 其他好文 > 详细

Strange fuction HDU - 2899

时间:2020-01-13 23:42:37      阅读:108      评论:0      收藏:0      [点我收藏+]

标签:最小值   pow   clu   ret   原来   pre   bit   define   电子   

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.

题意,输入一个y,然后确定这个函数的最小值

很明显是一道2分的题,可是一开始做的时候不会分啊啊啊啊啊啊啊啊啊啊啊啊啊啊(电子竞技菜是原罪)呜呜呜呜呜

其实耶不能怪我。。。。要二分的话,需要给F(x)求导,发现它在定义域俄式单调递增的,所以给dF求导,然后用二分,求出它的0点

再带回原来的表达式,代码如下

ps:我好气啊,当时都想到了导数,但不能明确的确定它的单调性,唉,可惜。

#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
const double PI=3.1415926535897931;
const long long sale=1e9+10;
const int MA= 1e7+10;
const int ma= 2*1e5+10;
const int few=1e3+10;
const double eps=1e-7;
using namespace std;
//////////////////////////////////////////////
double f(double x,double y)
{
    return 6*pow(x,7)+8*pow(x,6)+7*pow(x,3)+5*pow(x,2)-y*x;
}
double f1(double x,double y)
{
    return 42*pow(x,6)+48*pow(x,5)+21*pow(x,2)+10*x-y;
}
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        double y;
        cin>>y;
        double l=0,r=100;
        double mid;
        while(r-l>eps)
        {
            mid=(l+r)/2;
            if(f1(mid,y)<0)
                l=mid;
            else
                r=mid;

        }
        double ans=f(l,y);
        printf("%0.4f\n",ans);
    }
    return 0;
}

Strange fuction HDU - 2899

标签:最小值   pow   clu   ret   原来   pre   bit   define   电子   

原文地址:https://www.cnblogs.com/Aracne/p/12189693.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!