三分
来源:互联网 发布:流星网络电视看不了 编辑:程序博客网 时间:2024/05/17 07:47
问题描述:
给出一个N次函数,保证在范围[l,r]内存在一点x,使得[l,x]上单调增,[x,r]上单调减。试求出x的值。
代码:
double coe[20];//记录系数int n;//次数double calc(double x)//计算函数值{ double ans = 0; int m = n; for(int i = 1; i <= n; ++i) { ans += coe[i] * pow(x,m);//系数 * x ^ m m--; } ans += coe[n + 1];//加上常数项 return ans;}int main(){ double l,r;//区间端点 cin >> n >> l >> r;//输入 for(int i = 1; i <= n + 1; ++i) scanf("%lf",&coe[i]); double midl,midr;//靠近左端点的三分点,靠近右端点的三分点 while(r - l > 1e-8)//精度1e-8 { midl = (2 * l + r) / 3;//计算三分点 midr = (l + 2 * r) / 3;//计算三分点 if(calc(midl) < calc(midr))// 注意逻辑!!! l = midl; else r = midr; } printf("%.5lf\n",(l + r) / 2);//打印 return 0;}
对于整型凸性函数:
while(l < r - 1){ int midl = (2 * l + r) / 3; int midr = (l + 2 * r) / 3; if(calc(midl) < calc(midr)) l = midl; else r = midr;}int ans = max(calc(l),calc(r));
解决方法:
midl与midr在最值的异侧,由于函数在最大值两侧都具有单调性,因此较大的三分点更接近最大值,所以要抛弃距离最大值远的那个区间
解决求最大值最小值问题
常用分析方法:极限法
注意:实型数据要用double来保存
阅读全文
1 0
- 三分
- 三分
- 三分
- 三分
- 三分
- 三分
- 三分
- 三分
- 三分
- 三分
- 三分
- 三分
- 三分
- 三分
- 三分
- bzoj1857 三分套三分
- 【BZOJ1857】三分套三分
- 【三分套三分】传送带
- hdu 1160 FatMouse's Speed(最长上升子序列路径输出)
- jqGrid刷新数据
- 反转链表后输出、合并两个排序链表、树的子结构 -- 漫漫算法路 刷题篇
- Apache POI 合并单元格
- 29.Case class 和Case object代码实战解析
- 三分
- 【机器学习笔记】SVM part1: 线性SVM
- PAT 甲级 1023. Have Fun with Numbers
- mysql面试--索引原理
- this指针在普通函数、对象方法、定时器、构造函数、事件函数、call()、apply()中的执行
- HDU6138
- 使用qemu-monitor 从host直接连接vm
- 高可用设计之逻辑层
- ognl.MethodFailedException: Method "setId" failed for object Itemer/org.springframework.orm.hibernat