• HDU-2899 Strange fuction


    题意:有个方程组为(F(x) = 6*x^6 + 8*x^6 + 7*x^3 + 5*x^2 - y*x)(定义域为[0, 100]),求它的最小值,每次给定一个实数y。

    分析:可以发现这个函数的导函数为增函数,我们可以二分求出零点,然后在零点下面的值为负,在零点上面的值为正,代表原先的函数图像为凹函数。

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <vector>
    #include <cmath>
    #include <algorithm>
    
    using namespace std;
    const double eps = 1e-6;
    
    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 f2(double mid)
    {
    	return 42 * pow(mid, 6) + 48 * pow(mid, 5) + 21 * pow(mid, 2) + 10 * mid - y;
    }
    
    int main()
    {	
    	int t;
    	scanf("%d", &t);
    
    	while (t--)
    	{
    		cin >> y;
    
    		double l = 0.0, r = 100.0;
    		while (r - l > eps)
    		{
    			double mid = (l + r) / 2;
    			if (f2(mid) < eps) l = mid;
    			else r = mid;
    		}
    
    		printf("%.4lf
    ", f(l));
    
    	}
    
    	return 0;
    }
    
  • 相关阅读:
    [Luogu] 封锁阳光大学
    [other] Div
    [USACO11DEC] 牧草种植Grass Planting
    [Luogu] 仓鼠找sugar
    [USACO15DEC]最大流Max Flow
    [noip-2013] 货车运输
    [模板] 普通平衡树
    [Luogu] 树链剖分
    [ZJOI2008] 树的统计Count
    大组合数取模
  • 原文地址:https://www.cnblogs.com/pixel-Teee/p/13278717.html
Copyright © 2020-2023  润新知