1. 程式人生 > >HDU 2899 Strange fuction 三分

HDU 2899 Strange fuction 三分

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.
InputThe first line of the input contains an integer T(1<=T<=100) which means the number of test cases. Then T lines follow, each line has only one real numbers Y.(0 < Y <1e10)OutputJust the minimum value (accurate up to 4 decimal places),when x is between 0 and 100.Sample Input
2
100
200
Sample Output
-74.4291
-178.8534

題目的意思就是給你1個 y(0 < Y <1e10)  求F(x)的的最小值在區間[0,100]

首先觀察這個式子 顯然是先減後增的 那麼兩種方法 一種是手動求個導 算x=0 用二分

我用的是三分求極值其實差不多太多,還是比較容易的。

#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
long long  y;
const double eps= 1e-6;
double calc(double x)
{
    return (6*pow(x,7)+8*pow(x,6)+7*pow(x,3)+5*pow(x,2)-y*x);
}
double three(double l,double r)
{
    double mid,midmid;
    while(l+eps<r)
    {
        mid=(l+r)/2;
        midmid=(mid+r)/2;
        if(calc(mid)<calc(midmid)) r=midmid;
        else l=mid;
    }
    return mid;
}


int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%lld",&y);
        double x = three(0.0,100.0);
        printf("%.4lf\n",calc(x));
    }
    return 0;
}


相關推薦

HDU 2899 Strange fuction

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

Hdu 2899 Strange fuction(二分可做,模擬退火解法)

題意:計算F(x) = 6 * x^7+8*x^6+7*x^3+5*x^2-y*x (0 <= x <=100)的最小值 分析:求導發現0~100內為凹函式,那麼可以直接二分導數或者三分原函式, 這裡寫一下模擬退火的做法,每次左右找到較低函式值並轉移x,控制一下

HDU 2899 Strange fuction 二分

cnblogs clu return abs print names sca 求導 range 1.題意:給一個函數F(X)的表達式,求其最值,自變量定義域為0到100 2.分析:寫出題面函數的導函數的表達式,二分求導函數的零點,對應的就是極值點 3.代碼: 1 # i

HDU 2899 Strange fuction(牛頓叠代)

clas ont decimal ref OS careful rst panel 可以轉化 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S

hdu 2899 Strange fuction——模擬退火

mes using cti () urn algorithm str turn i++ 題目:http://acm.hdu.edu.cn/showproblem.php?pid=2899 還可三分。不過只寫了模擬退火。 #include<iostream> #

HDU 2199 Can you solve this equation? HDU 2899 Strange fuction

Can you solve this equation? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 254

hdu 2899 Strange fuction 【二分+數學函式求導】

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submissio

HDU 2899 Strange fuction 二分解一元多次方程

Strange fuction Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 9479    Accepted

Line belt HDU - 3400巢狀

巢狀三分 #include <iostream> #include <cmath> #include <cstdio> #include <algorithm> using namespace std; const double eps=1e

hdu 2988 Strange fuction【模擬退火】

計算:給出y ,    的最小值  wa到哭啊,簡直上火了,是板子沒有套對, nex=now+T*i;//新解 T*i是變化的範圍加上原先的才是新解, 還有精確度,因為評估函式要平方,所以要高一些 最終15ms &nbs

2899 Strange fuction【爬山演算法 || 模擬退火】

Time limit 1000 ms Memory limit 32768 kB Now, here is a fuction: $F(x) = 6 * x7+8*x6+7x3+5*x2-yx (0 <= x <=100) $ Can you fin

hdu 5531 Rebuild(

題目連結: 題目大意: 給出n個點,這n個點可以連成一個凸多邊形。現在以多邊形的端點作為圓心,分別做n個圓,要求在同一條線上的端點的圓是相切的。現在要求滿足條件以後,計算最小的圓面積總和。如果不能保證條件成立,則輸出impossible。 思路: 如果我們知道了第一個點上

HDU 3400 兩次

這道題卡了我好久,一直不能證明他們的距離為什麼是先遞減後遞增,所以也不能想到三分 網上也沒有給出證明,嘗試用三分寫了下,注意是三分的E,F點在AB CD點上的佔的比例,這樣程式碼比較簡單好看 #include<stdio.h> #include<ma

HDU 5531 Rebuild()——2015ACM/ICPC亞洲區長春站

傳送門 RebuildTime Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Submission(s): 2483    Accep

/函式先減後增/先增後減】 Strange fuction HDU基礎04二分法

Problem DescriptionNow, 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

Strange fuction—裸地

#include<stdio.h> #include<iostream> #include<algorithm> #include<string.h> #include<math.h> using namespace std; #define eps

Strange fuction 二分/求函式極值點

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 4527    Accepted Submission(s)

hdu 4717 The Moving Points()

fine names -- sqrt blank .cn class 題目 col 題目鏈接:hdu 4717 The Moving Points 題意: 在二維平面上有n個點,每個點給出移動的方向和速度。 問在某個時刻,這些點中最大距離最小是多少,輸出時刻和距離。 題解:

hdu 4355 Party All the Time()

while pid const d+ ans acm space += bits 題目鏈接:hdu 4355 Party All the Time 題意: 有n個人,在一個一維的坐標軸上,現在讓他們聚在一起。 每個人移動一段距離會產生一個 不開心值=S3*W,現在問你最小的

HDU 2298

拋物線 can 給定 mem -- for () make pair 斜拋從(0,0)到(x,y),問其角度。 首先觀察下就知道拋物線上橫坐標為x的點與給定的點的距離與角度關系並不是線性的,當角度大於一定值時可能會時距離單調遞減,所以先三分求個角度範圍,保證其點一定在拋物