hdu 2899 Strange fuction(二分+数学)
2015-08-24 20:55
337 查看
题目来源:hdu 2899 Strange fuction
Strange fuction
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 4829 Accepted Submission(s): 3441
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
题目大意:
给出一个函数:F(x)=6 * x^7+8*x^6+7*x^3+5*x^2-y*x (0 <= x <=100);现在输入一个y值.(0 < Y <1e10),求此函数的最小值。
题目分析:
观察函数,我们可知,F(x)一阶导数为F’(x)=42 * x^6+48*x^5+21*x^2+10*x-y;而F’(x)中若不看y,则前面的式子为单增函数,当输入y值后,我们便可把y当做常数来处理,当y值大于前面式子的最大值,即F’(100)<0时,原函数F(x)单调递减,此时F(100)为最小值;而当y不大于前面的式子,即存在y使得F’(x)可以==0时,则我们可以知道,x取F’(x)==0的这个x值时,原函数F(x)取得最小值,在此处便需要使用二分来查找这个x值。
AC代码:
Strange fuction
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 4829 Accepted Submission(s): 3441
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
题目大意:
给出一个函数:F(x)=6 * x^7+8*x^6+7*x^3+5*x^2-y*x (0 <= x <=100);现在输入一个y值.(0 < Y <1e10),求此函数的最小值。
题目分析:
观察函数,我们可知,F(x)一阶导数为F’(x)=42 * x^6+48*x^5+21*x^2+10*x-y;而F’(x)中若不看y,则前面的式子为单增函数,当输入y值后,我们便可把y当做常数来处理,当y值大于前面式子的最大值,即F’(100)<0时,原函数F(x)单调递减,此时F(100)为最小值;而当y不大于前面的式子,即存在y使得F’(x)可以==0时,则我们可以知道,x取F’(x)==0的这个x值时,原函数F(x)取得最小值,在此处便需要使用二分来查找这个x值。
AC代码:
#include<stdio.h> #include<math.h> double F(double x) //将原函数分解为F(x)-y*x,此处求的是分解后的F(x)值 { return 6*pow(x,7.0)+8*pow(x,6.0)+7*pow(x,3.0)+5*pow(x,2.0); } double f(double x) //分解后的F'(x)的值 { return 42*pow(x,6.0)+48*pow(x,5.0)+21*pow(x,2.0)+10*pow(x,1.0); } int main() { int n; double y; while(scanf("%d",&n)!=EOF) { while(n--) { scanf("%lf",&y); if(y>=F(100)) //此时原函数的导数不存在等于0的情况,即小于零 printf("%.4lf\n",F(100)-y*100); else { double mid,left=0,right=100; while(right-left>1e-8) //使用二分进行查找使得分解后的F(x)的导数等于0的x { mid=(left+right)/2; if(f(mid)<=y) left=mid; else right=mid; } printf("%.4lf\n",F(mid)-y*mid); } } } return 0; }
相关文章推荐
- 多线程四 经典线程同步之互斥量Mutex
- POJ 1163 The Triangle
- 九度oj 1139
- UIImageView动画 、自定义View 和手势的简单实用 Tom 猫 全部功能实现
- 在python中如何设置当前工作目录
- Android发展的一个重要方面Makefile分析
- Objective-c:NSFileHandle类,创建流对象,对文件进行写入、读取的操作
- 获取有关控件的坐标
- (转)st(state-threads) coroutine和stack分析
- 华为机试再回忆--第三题
- The type java.util.Map$Entry cannot be resolved. It is indirectly referenced。。.相似的错误
- Android Studio不能打开外来的项目:使用Gradle重建项目
- 红黑树-想说爱你不容易
- Just a Hook 线段树--成段更新
- 使用navicat的命令行模式创建修改表和存储过程
- apktool + dex2jar + xjad反编译apk文件
- LeetCode(30) Substring with Concatenation of All Words
- 2015/8/24/自定义Adapter
- hdu 1286 找新朋友
- ReactiveCocoa 学习资料