HDU2899 Strange fuction
2016-02-29 21:16
302 查看
题意:求连续函数并且是凹函数的最小值
法一:‘
三分查找:
0 ms飘过。第一次做三分搜索的题。
法二:
由于求的是最小值,而且是连续函数,在极值点的导数值为0。
而且我猜测试数据的最小值一定出现在极小值点,而且在0<=x<=100一定有满足条件的极小值点。
好吧,我们来估计一下:
首先:0<Y<1e10,0<=x<=100,而导数为f'(x) = 42*x^6 + 48*x^5 + 21*x^2 + 10*x -Y;
明显 42*x^6 + 48*x^5 + 21*x^2 + 10*x 的取值在0与42*100^6之间,上限要大一些,但这已经远远大于1e10 了。
所以无论Y取何值,左边部分总存在比Y小和比Y大的,而且是连续函数,还是先小后大,所以一定会有极小值。
于是我们就可以愉快地用二分法了:
法一:‘
三分查找:
#include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <string> #include <cstdlib> #include <cmath> using namespace std; double Y; double ans(double x) { return 6*pow(x, 7) + 8*pow(x, 6) + 7*pow(x, 3) + 5*pow(x, 2) - Y*x; } int main() { //freopen("in.txt", "r", stdin); int T; double l, r, lmid, rmid; cin>>T; while(T--){ cin>>Y; l = 0, r = 100; while(fabs(l-r) > 1e-7){ lmid = (l + r)/2.0; rmid = (r + lmid)/2.0; if(ans(lmid) < ans(rmid)){ r = rmid; } else{ l = lmid; } } printf("%.4f\n", ans(l)); } }
0 ms飘过。第一次做三分搜索的题。
法二:
由于求的是最小值,而且是连续函数,在极值点的导数值为0。
而且我猜测试数据的最小值一定出现在极小值点,而且在0<=x<=100一定有满足条件的极小值点。
好吧,我们来估计一下:
首先:0<Y<1e10,0<=x<=100,而导数为f'(x) = 42*x^6 + 48*x^5 + 21*x^2 + 10*x -Y;
明显 42*x^6 + 48*x^5 + 21*x^2 + 10*x 的取值在0与42*100^6之间,上限要大一些,但这已经远远大于1e10 了。
所以无论Y取何值,左边部分总存在比Y小和比Y大的,而且是连续函数,还是先小后大,所以一定会有极小值。
于是我们就可以愉快地用二分法了:
#include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <string> #include <cstdlib> #include <cmath> using namespace std; double Y; double der(double x) { return 42*pow(x, 6) + 48*pow(x, 5) + 21*pow(x, 2) + 10*x; } double ans(double x) { return 6*pow(x, 7) + 8*pow(x, 6) + 7*pow(x, 3) + 5*pow(x, 2) - Y*x; } int main() { // freopen("in.txt", "r", stdin); int T; double l, r, mid; cin>>T; while(T--){ cin>>Y; l = 0, r = 100; while(fabs(der(mid) - Y) > 1e-7){ mid = (l + r)/2; if(der(mid) > Y){ r = mid; } else{ l = mid; } } printf("%.4f\n", ans(mid)); } }但是15 ms 压过。好吧慢一些,而且证明很蛋疼,虽然写的时候根本没想那么多,写博客才突然想起来,高中数学不好。。。。。。
相关文章推荐
- Laravel 5.1 学习 之 授权
- android app 安装过程
- 重复的成员‘page’错误的解决方法
- Java抽象类和接口的若干问题
- 安卓通知的使用系列1:土司(Toast)通知和自定义土司(Toast)通知
- AutoCAD生成png透明图像
- SharePoint Search之(一):创建Search服务应用程序
- Sdut 2164 Binomial Coeffcients (组合数学) (山东省ACM第二届省赛 D 题)
- Android重要控件———ListView
- IOS 开发过程中的 消息通知 小红点
- Block解析_1
- R语言学习:数据结构3-矩阵、数组
- 详解OpenGL中的各种变换(投影变换,模型变换,视图变换)
- Android性能分析——Activity启动速度分析工具
- 架构漫谈(一):什么是架构?
- 由于想强制自己不看某直播视频网站就写了一个小程序
- ThoughtWorks面试题(标记给自己看)
- 第23章 SEH结构化异常处理(3)_终止处理程序
- linux磁盘结构与管理
- HTTP与TCP的关系,无连接、无状态详解