三分求最小值——HDU 2241
来源:互联网 发布:视频转换器 for mac 编辑:程序博客网 时间:2024/05/20 20:02
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=2241
中文题目,不解释
解题思路:
对于每个折线区间,Y+F之和必然是一个凹函数,求导就知道。
对于每段折线进行三分求极值,然后取所有段极值的最小值,即可得到最后解。
源代码:
#include<stdio.h>#include<string.h>#include<stdlib.h>#include<math.h>#include<set>#include<map>#include<vector>#include<algorithm>#define INF 0x3f3f3f3fusing namespace std;typedef long long LL;const double eps=1e-6;LL N;int M;struct node{ double x,y;}p[10005];double f(double x){ return N/x/x;}double cal(int key) //在区间k中通过三分求取最小影响{ double k,b; //y函数的系数 double lx,ly,rx,ry; double ll,rr; double x; lx=p[key].x; ly=p[key].y; rx=p[key+1].x; ry=p[key+1].y; k=(ry-ly)/(rx-lx); b=ly-k*lx; while(rx-lx>eps) { ll=lx+(rx-lx)*0.382; rr=lx+(rx-lx)*0.618; if(f(ll)+k*ll>f(rr)+k*rr) lx=ll; else rx=rr; } return min(f(lx)+lx*k,f(rx)+rx*k)+b;}int main(){freopen("in.txt","r",stdin);int i;int l,r,ll,rr;double ans;while(scanf("%d%I64d",&M,&N)==2){ memset(p,0,sizeof(p)); for(i=1;i<=M;i++) { scanf("%lf%lf",&p[i].x,&p[i].y); } if(N==0) //这个特判一定是不能少的 { printf("0.000\n"); continue; } ans=INF; for(i=1;i<M;i++) //枚举区间 { ans=min(ans,cal(i)); } printf("%.3lf\n",ans+eps); continue;}return 0;}
- 三分求最小值——HDU 2241
- 三分求最小值——HDU3400
- HDU-2899.三分初步-求最小值
- YT14-HDU-三分查找求F(x)的最小值
- POJ 3301 Texas Trip(三分求最小值)
- hdu 4355 简单三分找最小值
- 【三分求极值】hdu 3714
- HDU 2438 求函数+三分
- hdu 4717(三分求极值)
- LA5009——三分求极小值
- zoj 3386 Trick or Treat 三分 求最大值的 最小值
- hdu4717 The Moving Points 三分求函数最小值
- hdu 2438+hdu 3400(三分求极值)
- HDU 2438——三分求值
- UVA1476——Error Curves (三分求极值)
- ZOJ 3203 Light Bulb——(三分求极值)
- HDU-Strange fuction-求函数的最小值
- 湘潭大学 Hurry Up 三分,求凹函数的最小值问题
- 二分图的小总结
- SS, SP, BP 三个寄存器
- 《C Primer Plus》第12章之类型限定词restrict用法
- HDU4353(找一个三角形面积与它里面包含点的比值最小)
- Codeforces Round #191 (Div. 2) C magic five
- 三分求最小值——HDU 2241
- 如何防止自己的电脑成为肉鸡?
- zoj 2677 最大生成树
- 注释,连接字符串,nvl函数,linesize,pagesize
- Git常用命令和场景(四)--设置忽略提交的文件类型
- 数据挖掘导论
- VS2008快捷键大全
- 黑马程序员--final关键字特点
- 一些概念