hdoj3714【三分】
来源:互联网 发布:蒋介石军事水平 知乎 编辑:程序博客网 时间:2024/05/10 03:20
手动插姿势:
三分法可以应用于凸函数或者凹函数的求极值。
三分讲解:http://blog.csdn.net/pi9nc/article/details/9666627
三分模板:http://www.cnblogs.com/Hilda/archive/2013/03/02/2939708.html
double cal(Type a){ /* 根据题目的意思计算 */}void solve(){ double Left, Right; double mid, midmid; double mid_value, midmid_value; Left = MIN; Right = MAX; while (Left + EPS <= Right) { mid = (Left + Right) / 2; midmid = (mid + Right) / 2; if (cal(mid)>=cal(midmid)) Right = midmid; else Left = mid; }}更多相关题:HDU :3400 2298 4454 2438 3756 POJ: 3301 3737 ZOJ: 3203
题意:
给n个二次函数,定义域为[0,1000], 求x在定义域中每个x所在的n个函数的最大值的最小值。
思路:
其实说N个函数的话,定义域也确定了,要么是单调增,要么是单调减,要么就是凹性,因为a>=0的,三分一下,每次找位置的最大,然后取最小就好了。。。
#include <bits/stdc++.h>using namespace std;typedef long long LL;const int N=1e4;const double eps=1e-9;const double INF=1e15;struct asd{ double a,b,c;};asd q[N];int n;double fx(double a,double b,double c,double x){ return a*x*x+b*x+c;}double getmin(double x){ double temp; double ans=-INF; for(int i=0;i<n;i++) { temp=fx(q[i].a,q[i].b,q[i].c,x); if(ans<temp) ans=temp; } return ans;}void sanfen(){ double ans=INF; double Left, Right; double mid; double temp1,temp2; Left = 0; Right = 1000; while (Left<=Right) { mid=(Left+Right)/2; temp1=getmin(mid); temp2=getmin(mid-eps); if(temp1<temp2) Left=mid+eps; else Right=mid-eps; if(ans>temp1) ans=temp1; } printf("%.4lf\n",ans);}int main(){ int T; scanf("%d",&T); while(T--) { scanf("%d",&n); for(int i=0;i<n;i++) scanf("%lf%lf%lf",&q[i].a,&q[i].b,&q[i].c); sanfen(); } return 0;}
0 0
- hdoj3714【三分】
- 三分
- 三分
- 三分
- 三分
- 三分
- 三分
- 三分
- 三分
- 三分
- 三分
- 三分
- 三分
- 三分
- 三分
- 三分
- bzoj1857 三分套三分
- 【BZOJ1857】三分套三分
- 虚函数实现原理(转)
- 容器定义存储(CDS)—存储技术的"瘦身"革命
- 替换空格
- 什么是P问题、NP问题和NPC问题
- 第3章 管道符、重定向与环境变量
- hdoj3714【三分】
- [Java]阿里内部面试总结
- Android学习之RecyclerView学习
- Javascript函数封装
- LIBSVM使用方法及参数设置
- Android开源库之使用ZXing开源库二维码-实现竖屏且高识别率
- CCF 消除类游戏
- Android自定义控件下拉刷新和加载更多
- 【一步步学OpenGL 2】-《你好顶点》