Strange fuction HDU - 2899

Posted aracne

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Strange fuction HDU - 2899相关的知识,希望对你有一定的参考价值。

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
",ans);
    }
    return 0;
}

以上是关于Strange fuction HDU - 2899的主要内容,如果未能解决你的问题,请参考以下文章

HDU 2899 strange fuction

HDU 2899 Strange fuction (模拟退火)

hdu2899Strange fuction(解方程+二分)

HDU 2899 Strange fuction(牛顿迭代)

hdu 2899 Strange fuction——模拟退火

HDU 2899 Strange fuction 二分