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/*26499620 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,則...