博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU2899:Strange fuction(二分 + 数学)
阅读量:6403 次
发布时间:2019-06-23

本文共 1471 字,大约阅读时间需要 4 分钟。

Strange fuction

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 6874    Accepted Submission(s): 4807


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
 

Author
Redow
 
题意:给定y值,求上面函数在[0, 100]内的最小值。

思路:先对函数求导,发现导函数是递增的,若f'(100) > 0,二分求出导函数的零点,代入原函数即可。

# include 
# include
int y;double fun1(double x){ return 6*pow(x, 7)+8*pow(x, 6)+7*pow(x, 3)+5*pow(x, 2)-y*x;}double fun2(double x){ return 42*pow(x, 6)+48*pow(x, 5)+21*pow(x, 2)+10*x-y;}int main(){ int t; scanf("%d",&t); while(t--) { scanf("%d",&y); if(fun2(100) <= 0) printf("%.4f\n",fun1(100)); else { double l = 0, r = 100, mid; while(r-l > 1e-7) { mid = (l+r)/2; if(fun2(mid) > 0) r = mid; else l = mid; } printf("%.4f\n",fun1(mid)); } } return 0;}

转载于:https://www.cnblogs.com/junior19/p/6729996.html

你可能感兴趣的文章
Linux下添加新硬盘,分区及挂载
查看>>
一起来将vscode变成私人定制笔记本
查看>>
Flutter 云音乐
查看>>
RecyclerView实现多type页面
查看>>
个人的web商城网站
查看>>
debian fcitx
查看>>
排中律与实无穷问题的性质分析
查看>>
08/23 学习总结
查看>>
关于Ubuntu下安装phpmyadmin后mysqli丢失的解决
查看>>
物理层
查看>>
linux多网卡路由设置
查看>>
win7环境下的栈溢出与实战
查看>>
查看ios字体库方法
查看>>
八大监听器
查看>>
self.navigationController退出到指定页面,或者一次性pop出n个页面
查看>>
Quartz实现数据库动态配置定时任务
查看>>
iptables 端口转发以及双向通信
查看>>
备战一线互联网公司Java工程师面试题 (1)
查看>>
ThinkPHP中自动验证失败
查看>>
jquery图片切换插件jquery.cycle.js参数详解
查看>>