1. 程式人生 > >YT14-HDU-三分查詢求F(x)的最小值

YT14-HDU-三分查詢求F(x)的最小值

Problem Description

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.

Input

The 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)

Output

Just 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

程式碼如下:

#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
double Equ(double x,double Y)
{
    return 6*pow(x,7)+8*pow(x,6)+7*pow(x,3)+5*pow(x,2)-Y*x;        //返回F(x)
}

int main()
{
    int T,i;
    double Y,low,high,t1,t2;
    cin>>T;
    while (T--)
    {
        cin>>Y;
        low=0,high=100;  
        for (i=1;i<=200;i++)                   //確定三分查詢的次數
        {
            t1=(low+high)/2;
            t2=(t1+high)/2;                   //將0到100分為3份,逐漸縮小查詢範圍
            if (Equ(t1,Y)<Equ(t2,Y))
                high=t2;
            else
                low=t1;
        }
        cout<<setiosflags(ios::fixed)<<setprecision(4)<<Equ(t1,Y)<<endl;    //控制輸出格式
    }
    return 0;
}


解題思路:

題目大意是輸入Y,求F(x)在x屬於【0,100】間的最小值。

用的是三分查詢,二分查詢也可以,但由於不確定F(x)在0到100間的單調性,所以還是三分查詢更適用。



相關推薦

YT14-HDU-查詢F(x)的

Problem Description 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 wh

查詢單峰函式的】 ZOJ 3386 Trick or Treat

         題目大意是:在一個平面上有N個點,每個點的座標已經給出,現在要求在X軸上找一個點,使得這個點到所有點中最大的距離最小。          分析:我們設這個點為X0,所求的距離為F(x),那麼對於所有的 X < X0 和 X > X0 都有F(x)

數組 異議

n) () nbsp his urn 函數 span ret prototype var arr = [‘5‘,‘35‘, ‘58‘, ‘87‘, ‘96‘ ]; 1: Array.prototype.min = function() {   var min =

155. Min Stack 棧的

gin pac append clas call onos all time self Design a stack that supports push, pop, top, and retrieving the minimum element in constant t

使用遞迴的方法陣列的

//使用遞迴的話,就需要將問題進行分割,最後得到每個部分的最小值   public class MixReCursion {         //主函式    &nbs

查詢旋轉陣列的-- 二分查詢

假定一個排序陣列以某個未知元素為支點做了旋轉,如:原陣列0 1 2 4 5 6 7旋轉後得到 45 6 7 0 1 2。請找出旋轉後陣列的最小值。假定陣列中沒有重複數字 o  旋轉之後的陣列實際上可

HDU 3183.A Magic Lamp-區間找-RMQ(ST)

!= leading output chm ... cout char bsp u+ A Magic Lamp Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe

zoj 3386 Trick or Treat x軸上一點到各點的中的 點到線段距離

Trick or Treat -------------------------------------------------------------------------------- Time Limit: 5 Seconds      Memory Limit: 6

譜聚類演算法入門教程()—— f^TLf的

在上一篇部落格中,我們知道目標函式變為 argmin⁡f∈R6fTLfarg \min \limits_{f \in \R^6} f^TLfargf∈R6min​fTLf,即找到一個fff,使得 fTLff^TLffTLf 取得最小值 這篇部落格將通過求導的方

單峰(單谷)函式極值

what is 三分法 對於二分,相信你一定十分熟悉。就是在一個具有單調性序列上查詢你所需要的數字。由於其單調性,你每一次在查詢是就可以將規模縮小一半,大致就是: 1.假設這個數列單調遞增 2.維護一個區間左端點\(l\),區間右端點r和中間點\(mid\) 3.如果\(mid\)比想要的值小,則左邊肯定

查詢-二分查詢查詢

二分查詢的查詢過程是: 每輪與有序區間的中間元素進行比較,若相等則返回當前元素位置。若被查詢元素大於中間元素,則到右側區間查詢,若查詢元素小於中間元素,則到左側區間查詢。 不斷重複前序查詢過程,或者待查詢區間失效。 輸入:表的長度,表中各個元素。要查詢的表元素。 輸出

二分與查詢模板

可參考https://wenku.baidu.com/view/3f0805820740be1e650e9a8c.html 二分查詢 a[] 是有序的 成升序或降序 int find(int a[])//假定是在0到100之間搜尋 l取最左邊 r 取最右邊

查詢的時間複雜度分析

       在網上搜索了一下有關三分查詢時間複雜度分析的。有人說是O(3log3(n)),但是實驗中三分比二分更耗時,所以他們就認為不能迷信時間複雜度。我現在糾正一下(僅個人分析,供網友參考):    1.二分查詢的時間複雜度:因為每次都是折半,可以構造一顆遞迴樹,共lo

查詢演算法之查詢

三、具體實現  const double EPS = 1e-10; double calc(double x) { // f(x) = -(x-3)^2 + 2; return -(x-3.0)*(x-3.0) + 2; } double ternary

Codeforces 939E Maximize! (查詢

Output Output the answer for each query of the second type in the order these queries are given in input. Each number should be printed in separate line

ACM-二分-查詢筆記

思想: 分治。 適用範圍:二分只適用於單調函式,對單調遞增或單調遞減的一個序列中的某一個元素進行查詢;三分用於凸函式和凹函式。 複雜度分析:二分的時間複雜度為log2(n),而三分的時間複雜度為3log3(n)。 <<挑戰程式設計

單峰函式極值

模板,注意精度一般為1e-6,1e-8跟1e-10用的較少。double three_devide(double l, double r) { double left = l, right = r,mid,midmid; while(left + esp &

二分、查詢演算法模板

二分、三分查詢演算法的原理及實現程式碼。 簡單定義 在一個單調有序的集合中查詢元素,每次將集合分為左右兩部分,判斷解在哪個部分中並調整集合上下界,重複直到找到目標元素。 時間複雜度 O (logn),優於直接順序查詢O(n) 原理 左閉右開二分 123456789101112131415161

——HDU3400

題目連結: 題目大意: 給定兩條線AB和CD,現在要從A點,走到D點。 線上段上AB上走,速度是p,線上段CD,上走速度是q,在空間中其他地方走速度是r。 求所需的最小時間。 解題思路: 線上段AB上,任取一點E,A-E-CD的時間必定是一個關於點E的凹函式。 那麼我

和菜鳥一起學演算法之極值問題

          午後的陽光,那麼燦爛,如果不是溫度過高,那麼去西湖看看風景還是不錯的。想著,現在西湖邊應該是平靜的湖面,加上無數知了在柳枝上演奏著交響曲吧。小看了下非誠勿擾,那男生為了女孩唐靜付出了7年,唉,可是他錯了,女孩根本不愛他,不過期間他的執著和付出,很讓我感動