hdu 3714 && zoj 3203 三分
2011-08-07 09:37
344 查看
初识三分,感觉这个算法也不是很难理解,还感觉这个算法好优美。但是,要学习到了,能用三分的地方,函数必须满足单峰性。同二分比较,二分时候,需要函数满足单调性。这次,看了别人的代码,深深的进入了脑子里面了。其实,这个题目真的很简单。但在自己真的太菜了,还得多总结。现在只能看这别人的代码来学习。继续努力吧!
说一下 hdu 3174吧,题意很简单就是求所有二次曲线中函数图象最大的部分的最小值。读了题意,画个图,就知道所有的图象的最小值是一个单峰函数图象,可以用三分来求。
hdu 3171代码如下:
zoj 3203 :
说一下 hdu 3174吧,题意很简单就是求所有二次曲线中函数图象最大的部分的最小值。读了题意,画个图,就知道所有的图象的最小值是一个单峰函数图象,可以用三分来求。
hdu 3171代码如下:
#include<stdio.h> #include<algorithm> #include<iostream> using namespace std; #define N 10002 struct point { double a; double b; double c; }fun ; double max(double a,double b) //返回最值 { return a>b?a:b; } double fc(int i,double x) //函数 { return fun[i].a*x*x+fun[i].b*x+fun[i].c; } double cal(double mid,int n) //计算这个点的最大值 { double h=-2147483640; for(int i=0;i<n;i++) { h=max(h,fc(i,mid)); } return h; } void slove(int n) { double l,r; l=0;r=1000.0; for(int i=0;i<=100;i++) //因为函数满足单峰性 求得的最值始终在所求函数图象上 { double mid1=(2*l+r)/3; //满足单峰性质的函数,可以用三分 double mid2=(l+2*r)/3; double h1=cal(mid1,n); //计算mid1点的值 double h2=cal(mid2,n); //计算mid2点的值 if(h1>h2) { l=mid1; } else { r=mid2; } } double ans=cal(l,n); printf("%.4lf\n",ans); } int main() { int t; scanf("%d",&t); while(t--) { int n; scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%lf%lf%lf",&fun[i].a,&fun[i].b,&fun[i].c); } slove(n); } return 0; }
zoj 3203 :
#include<cstdio> #include<cmath> #include<iostream> using namespace std; #define EPS 1e-10 double D,H,h; double shadowlen(double x) { return (H*x+D*h-D*H)/x+(D-x); } int main() { int t; scanf("%d",&t); while(t--) { scanf("%lf%lf%lf",&H,&h,&D); double l=D*(H-h)/H,r=D; while(fabs(l-r)>EPS) { double mid=(l+r)/2; double mmid=(r+mid)/2; if(shadowlen(mid)>shadowlen(mmid))r=mmid; else l=mid; } printf("%.3lf\n",shadowlen(l)); } return 0; }
相关文章推荐
- ZOJ 3203 Light Bulb【数学推导&三分】
- HDU 1988 & ZOJ 2991 Flipping Burned Pancakes(数学啊+模拟)
- HDU 4334 && ZOJ 3631
- hdu 4421 && zoj 3656 Bit Magic 2-sat题找规律水过 也可以用并查集
- POJ 3654 & ZOJ 2936 & HDU 2723 Electronic Document Security(模拟)
- zoj 3203 Light Bulb(三分)
- zoj 3203 三分模版
- zoj 3203 Light Bulb (三分)
- POJ 3654 & ZOJ 2936 & HDU 2723 Electronic Document Security(模拟)
- HDU 2377 && ZOJ 2412
- 三分 --- ZOJ 3203 Light Bulb
- Light Bulb ZOJ - 3203 一道三分查找的题
- HDU 4118 && ZOJ 3659
- Codeforces 136 divIID && zoj 3633 && HDU 4358
- POJ 3653 & ZOJ 2935 & HDU 2722 Here We Go(relians) Again(最短路dijstra)
- HDU 1010 Tempter of the Bone &&ZOJ 2110【DFS】
- zoj 3203 三分模版
- Hdu 1242 & Zoj 1649 Rescue (优先队列+BFS)
- ZOJ 3426 & HDU 3719 Snooker Referee
- HDU 1394 &amp; ZOJ 1484 Minimum Inversion Number