• Hdoj 2899.Strange fuction 题解


    Problem Description

    Now, here is a fuction:
    F(x) = 6 * x^7+8x^6+7x^3+5x^2-yx (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
    

    Author

    Redow


    思路

    函数是:(F(x) = 6x^7+8x^6+7x^3+5x^2-yx)

    导函数是:(F'(x) = 42x^6 +48x^5+21x^2+10x-y)

    由题目条件可得,导函数单调递增,(F'(100))最大,如果它还小于0,说明原函数单调递减,(F(100))最小。其他情况是:二分查找导函数的零点,找到后代入原函数就可以得到答案

    代码

    #include<bits/stdc++.h>
    using namespace std;
    
    double y;
    double f(double x)
    {
    	return 6*pow(x,7) + 8*pow(x,6) + 7*pow(x,3) + 5*pow(x,2) - y*x;
    }//函数
    
    double df(double x)
    {
    	return 42*pow(x,6) + 48*pow(x,5) + 21*pow(x,2) + 10*x - y;
    }//导函数
    int main() 
    {
    	int n;
    	cin >> n;
    	while(n--)
    	{
    		cin >> y;
    		if(df(100) <= 0)
    		{
    			printf("%.4lf
    ",f(100)); 
    			continue;
    		}
    		double l = 0, r = 100.0;
    		double mid;
    		while(r-l>=1e-8)
    		{
    			mid = (l+r)/2;
    			if(df(mid)<0)
    				l = mid;
    			else
    				r = mid;
    		}
    		printf("%.4lf
    ",f(mid)); 
    	}
    	return 0;
    }
    
  • 相关阅读:
    Redis配置参数详解
    amoeba实现读写分离
    P1525 关押罪犯 并查集
    模板汇总——treap
    差分约束
    HDU
    CodeForces 522C Chicken or Fish?
    CodeForces 812E Sagheer and Apple Tree 树上nim
    CodeForces 855E Salazar Slytherin's Locket
    CodeForces 283C World Eater Brothers
  • 原文地址:https://www.cnblogs.com/MartinLwx/p/9961938.html
Copyright © 2020-2023  润新知