zoukankan      html  css  js  c++  java
  • 三分模板

    三分模板

    三分整数模板

    整数的三分可能具有不确定性,可以通过改变while循环的条件(while(l + 5 < r))来缩小范围,再通过

    for(int i = l; i <= r; i++)
          ans = min(ans, calc(i));
    for(int i = 1; i <= r; i++)
          ans = max(ans, calc(i));
    
    //更新方式改成
    l = lmid
    r = rmid
    

    来确定答案,下面的模板仅供参考,如果(WA)了,可以考虑通过这种方式改进。

    凸函数的极大值

    ll l, r;
    while(l < r) {
        ll lmid = l + (r - l) / 3;
        ll rmid = r - (r - l) / 3;
        if(calc(lmid) <= calc(rmid))	l = lmid + 1;
        else r = rmid - 1;
    }
    printf("%lld
    ", max(calc(l), calc(r)));
    

    凹函数的极小值

    ll l, r;
    while(l < r) {
        ll lmid = l + (r - l) / 3;
        ll rmid = r - (r - l) / 3;
        if(calc(rmid) >= calc(lmid))	r = mid - 1;
        else 	l = mid + 1;
    }
    printf("%lld
    ", min(calc(l), calc(r)));
    

    三分小数模板

    凸函数的极大值

    double l, r;
    for(int i = 0; i < 300; i++) {
        double lmid = l + (r - l) / 3;
        double rmid = r - (r - l) / 3;
        if(calc(lmid) <= calc(rmid))	l = lmid;
        else 	r = rmid;
    }
    printf("%.6f
    ", calc(l));
    

    凹函数的极小值

    double l, r;
    for(int i = 0; i < 300; i++) {
        double lmid = l + (r - l) / 3;
        double rmid = r - (r - l) / 3;
        if(calc(rmid) >= calc(lmid))	r = rmid;
        else 	l = lmid;
    }
    printf("%.6f
    ", calc(l));
    
  • 相关阅读:
    职场之道
    AlphaBlend
    感动前行——给医学媳妇写的演讲稿(非IT类)
    高等数学积分公式大全
    分析Model2系统心得
    【软考】(六)关系代数
    飞鸽传书官方站点 创立黑马程序猿训练营
    实现简单的二级级联
    const和readonly差别
    Chord算法(原理)
  • 原文地址:https://www.cnblogs.com/lifehappy/p/12926640.html
Copyright © 2011-2022 走看看