您的位置:首页 > 其它

POJ 3737 UmBasketella 三分法 入门题

2013-08-29 10:33 381 查看
 

 二分法:适用于单调函数,单调增或单调减

三分法:适用于单峰凸性函数,如二次函数



缩写 l:left ,r: right , m1:mid 1,m2:mid2

三分法模板:

#define eps 10e-6
double cal(){}//计算题目所需要的值
while(l+eps<r)
{
m1=l+(r-l)/3;
m2=r-(r-l)/3;
v1=cal(m1);
v2=cal(m2);
if(v1<v2)l=m1;
else r=m2;
}


 AC代码:




View Code

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#define eps 10e-6
using namespace std;
const double pi = acos(double(-1));
double S;
double cal(double r)
{
double R = S/pi/r-r;
double h = sqrt(R*R-r*r);
return h*pi*r*r/3;
}
int main()
{
while(~scanf("%lf",&S))
{
double l= 0,r= sqrt(S/pi);
double m1,m2,v1,v2;
while(l+eps<r)
{
m1=l+(r-l)/3;
m2=r-(r-l)/3;
v1=cal(m1);
v2=cal(m2);
if(v1<v2)l=m1;
else r=m2;
}
double R = S/pi/r-r;
double h = sqrt(R*R-r*r);
double V = h*pi*r*r/3;
printf("%.2f\n%.2f\n%.2f\n",V,h,r);
}
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: