zoukankan      html  css  js  c++  java
  • HDU 2899 strange fuction

    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

    分析:
    求函数的最小值,首先求导的导函数为:G(x) = 42 * x^6+48*x^5+21*x^2+10*x-y (0 <= x <=100)
    分析导函数的,导函数为一个单调递增的函数。如果导函数的最大值小于0,那么原函数在区间内单调递减。
    即F(100)最小;如果但函数的最小值大于0,那么原函数在区间内单调递增,即F(0)最小。如果导函数既有正又有负
    又由于导函数是单增函数,所以必有先负后正,即原函数必有先减后增的性质。求出导函数的零点就是原函数的最小值点。
    求导函数最小值方法是2分法.

    代码:

    #include "stdafx.h"
    #include <iostream>
    #include <iomanip>
    using namespace std;
    #define a 1e-10
    double min(double x, double y)
    {
    double f;
    f = 42 * pow(x, 6) + 48 * pow(x, 5) + 21 * pow(x, 2) + 10 * x - y;
    return f;
    }
    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;
    }
    int main()
    {
    int n;
    cin >> n;
    while (n--)
    {
    double high = 100.0;
    double low = 0.0;
    double mid;
    double y;
    cin >> y;
    if (min(100.0, y) <= 0)
    {
    cout << setiosflags(ios::fixed) << setprecision(4) << f(100.0, y) << endl;        //setiosflags(ios::fixed) ,setprecision(4)保留小数点后四位
    continue;
    }
    if (min(0.0, y) >= 0)
    {
    cout << setiosflags(ios::fixed) << setprecision(4) << f(0.0, y) << endl;
    continue;
    }
    while (high - low >= a)
    {
    mid = (low + high) / 2;
    if (min(mid, y) >= a)
    high = mid;
    else
    low = mid;
    }
    cout << setiosflags(ios::fixed) << setprecision(4) << f(mid, y) << endl;
    }

    return 0;
    }

     

  • 相关阅读:
    量子纠错码——Stabilizer codes
    量子计算机编程(三)——量子应用
    量子计算机编程(二)——QPU基础函数
    量子计算机编程(一)——QPU编程
    量子搜索算法 Grover search
    因数分解算法、周期查找算法(简化)
    量子傅里叶变换
    简单的量子算法(二):Simon's Algorithm
    简单的量子算法(一):Hadamard 变换、Parity Problem
    Web Scraper——轻量数据爬取利器
  • 原文地址:https://www.cnblogs.com/zhangfuxiao/p/9319974.html
Copyright © 2011-2022 走看看