解決單峰最值問題0 618法 hdu 4355

2022-05-29 05:48:13 字數 950 閱讀 9582

0.618法:

設f(x)在區間[x,y]上為單峰函式,可以使用0.618法實現求解最值問題,實質與二分法一樣,只是更加精確。

題意:在x軸上有n個點a1,a2,...ai,每個點有wi重量,求(a1-x)^3*w1+(a2-x)^3*w2+(a3-x)^3*w3...+(ai-x)^3*wi的最小值。

view code

1/*2

6499620 2012-08-09 20:37:56 accepted 4355 781ms 1276k 1439 b g++ hanker

30.618法4*/

5 #include6 #include7 #include8 #include9

10using

namespace

std;

11const

int max=50005;12

const

double s=0.618;13

14double

card[max],val[max],sum,minx,maxx;

15int

n;16

17double pow(double

n)18

21double f(double

pos)

2230

31void

solve()

3248

else

4955

}56 sum=f((a+b)/2

);57}58

59int

main()

6077

solve();

78 printf("

case #%d: %.lf\n

",k++,sum);79}

80return0;

81 }

運用插值法解決靜態查詢問題

靜態查詢問題描述為 給定乙個整數和乙個陣列,查詢該整數在這個陣列中的位置或返回乙個不存在的標誌,在查詢過程中陣列中的資料是不變的。例如在乙個 號碼本裡查詢某乙個人。如果陣列中的資料是無序的,我們只能用順序查詢來檢查陣列中的每乙個值,直到找到乙個匹配的為止。如果陣列中的資料已經排過序,就可以使用二分搜...

Splay解決區間問題 單點更新,區間最值詢問

單點更新,區間詢問 splay實現 注意寫rotateto的時候。include include include includeusing namespace std const int maxn 222222 class splaytree void read int n void push up...

二分法解決最大值最小化問題

把乙個包含n個正整數的序列劃分成m個連續的子串行。設第i個序列的各數之和為s i 求所有s i 的最大值最小是多少?例如序列1 2 3 2 5 4劃分為3個子序列的最優方案為 1 2 3 2 5 4,其中s 1 s 2 s 3 分別為6,7,4,那麼最大值為7 如果劃分為 1 2 3 2 5 4,則...