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));
    
  • 相关阅读:
    PCA 最大方差理论的直观解释
    支持向量机综述
    sklearn 的 PolynomialFeatures 的用法
    (转载)FM 算法
    (转载)Kaggle_Titanic生存预测 -- 详细流程吐血梳理
    (转载)Scikit-learn使用总结
    m96-97 lsc nc赛
    CSP-S 94 (sb lsc gc赛)
    CSP-S 95 (sb lsc yy赛)
    小反思
  • 原文地址:https://www.cnblogs.com/lifehappy/p/12926640.html
Copyright © 2011-2022 走看看