码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 2899 strange fuction

时间:2018-07-16 21:09:36      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:cti   区间   clu   inpu   real   rip   efi   方法   最大   

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;
}

 

HDU 2899 strange fuction

标签:cti   区间   clu   inpu   real   rip   efi   方法   最大   

原文地址:https://www.cnblogs.com/zhangfuxiao/p/9319974.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!