三分。。。

笑死,莫名其妙在最后学个新算法,不过不太难的样子。
即对于一个有极值的函数,求取极值。与二分的差别在于,它处理的是单峰函数,而二分处理的是单调函数。
突然想到为什么二分是单调呢,自己思考。
P3382 【模板】三分

不难想到,对于一个单峰函数,我们可以任取起两个点,然后判断这两个哪个更靠近顶点,舍弃另一个即可。提一嘴小数二分,lr之间允许差值,我建议是用ans保存,可能会好一点!

#include<bits/stdc++.h> 
using namespace std;
int n,m;double a[100];
const double k=1e-6;
double getsum(double x)
{
	double rt=0;for(int i=n;i>=0;i--) rt=rt*x+a[i];
	return rt;
}
int main()
{	
	double l,r;scanf("%d%lf%lf",&n,&l,&r);for(int i=n;i>=0;i--) scanf("%lf",&a[i]);
	double ans;while(l+k<=r)
	{ 
		double L=(r-l)/3.0,mid1=l+L,mid2=r-L; 
		if(getsum(mid1)>getsum(mid2)) ans=mid1,r=mid2;
		else ans=mid2,l=mid1;
	}printf("%.5lf",ans);
	return 0;
 } 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值