[三分]求凹凸函数最值

https://www.luogu.org/problemnew/show/P3382
二分用于单调函数, 三分用于凹凸函数.
三分就是把区间分成三份, 设左右端点为L和R, 有两种分法。
第一种是区间内的第一个点lmid = (L + R) / 2, 第二个点rmid = (lmid + R) / 2。
第二种是lmid = l + (r – l) / 3, rmid = l + 2 * (r – l) / 3。
然后判断函数在这两个位置的值,根据实际情况缩小答案的区间。
比如求凸函数最大值,如果f(lmid) < f(rmid), 则L = lmid,否则R = rmid。 然后循环一定次数保证精度,最后的R就是最大值点。 如果是整数三分,那就是L = lmid + 1,否则R = rmid - 1。 注意1e-5的精度至少64次,1e-6建议100次。 实数三分:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

const int maxn = 1e3 + 5, mod = 1e9 + 7;

int n;
double a[15];
double F(double x)
{
   
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值