二分 三分小記

2022-06-12 22:06:12 字數 2211 閱讀 2152

目錄二分(最小值最大)

三分(單峰函式)

三分(單谷函式)

二分hdu 1551 cable master

三分hdu 2899 strange fuction

洛谷 2600 jzoj 1721 瞭望塔

移植於原csdn部落格

對於這兩種演算法,往往會配上其它演算法,它們通常會轉換成判定性問題,往往需要控制它們的精度

while (l>1;

if (check(mid)) r=mid;

else l=mid+1;

}return l;

const double eps=1e-8;

while (l+epswhile (l>1;

if (check(mid)) l=mid;

else r=mid-1;

}return l;

const double eps=1e-8;

while (l+epsconst double eps=1e-8;

while (l+epscalc(rmid)) r=rmid;

else l=lmid;

}return l;

rr int now=l;

while (l+2calc(rmid)) r=rmid;

else l=lmid;

}for (rr int i=l;i<=r;++i)

if (calc(i)>calc(now)) now=i;

return now;

const double eps=1e-8;

while (l+epsrr int now=l;

while (l+2求\(y=8x^4+7x^3+2x^2+3x+6\),\(x\)在\([0\sim 100]\)的解

首先\(y\)是單調上公升的,所以需要用到二分,但是首先要判斷是否無解,精度是真的噁心

#include #define rr register

using namespace std;

int n;

signed main()

printf("%.2lf\n",l);

}return 0;

}

給出乙個\(n\)次函式,保證在範圍\([l,r]\)內存在一點\(x\),使得\([l,x]\)上單調增,\([x,r]\)上單調減。試求出\(x\)的值。

首先如何快速求出\(n\)次函式的值呢,可以用秦九韶演算法,既然是三分,那麼就是這樣的

(偽**)

while (l+epsansw(r-k)) r-=k;

else l+=k;

}

然而如果要滿足三分,必須嚴格單峰或者單谷,否則三分不再適用

#include #define rr register

using namespace std;

typedef double db;

const db eps=1e-7;

db a[15],l,r; int n;

inline db answ(db x)

signed main()

return !printf("%.5lf",l);

}

\(y=6x^7+8x^6+7x^3+5x^2-ax\),給定\(a\),問\(x\)在\([0\sim 100]\)中令\(y\)最小的值

可以發現這應該是乙個單谷函式,因為若沒有\(-ax\),就直接單調上公升,但是一旦加了上去,感性理解,中間會有乙個最小值,所以可以用三分解決

#include #define rr register

using namespace std;

int n; double y;

inline double f(double x)

signed main()

inline void min(db &a,db b)

inline void max(db &a,db b)

inline db answ(db x0,db y0)

signed main()

min(ans,answ(l,k[i]*l+b[i]));

}return !printf("%.3lf",ans);

}

二分 三分模板

適用於 單調函式 單調增或單調減 基本思想 給定9個數,由小到大排列,從這9個數中找出某乙個確切的數 比如4 偽 int binary sreach int a,int left,int right,int x if a left x return left return 1 給你三個陣列a,b,c...

二分和三分

三分二分,乙個簡單而神奇的演算法,可以簡化時間複雜度,但是用二分有乙個條件,就是我們進行二分的序列必須有單調性。原理 aa中找乙個數x xx 保證x xx一定存在 我們可以用樸素演算法,直接從頭到尾找一遍,時間複雜度o n o n o n 如果當序列a aa的長度十分大時,這種方法就不好用了。二分橫...

二分和三分

二分 二分,即為折半查詢,它是一種效率較高的查詢方法。但是,折半查詢要求線性表必須採用順序儲存結構,而且表中元素按關鍵字有序排列。也就是說,二分的條件為必須滿足數列或某一邏輯的順序性,單調 只有這樣才能進行二分。查詢方法 首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如...