1.1從有序陣列中查詢某值
//陣列長 目標值
int n, k;
int arr[n];
void solve()
return lst;
//此時 fst + 1 = lst
}
stl關於二分的應用
stl
lower_bound(begin, end, key)
//從陣列的begin位置到end-1位置二分查詢第乙個大於或等於num的數字
//找到返回該數字的位址,不存在則返回end。
//通過返回的位址減去起始位址begin,得到找到數字在陣列中的下標。
upper_bound(begin, end, key)
//從陣列的begin位置到end-1位置二分查詢第乙個大於num的數字
//找到返回該數字的位址,不存在則返回end。
//通過返回的位址減去起始位址begin,得到找到數字在陣列中的下標。
lower_bound(begin, end, num, greater())
//從陣列的begin位置到end-1位置二分查詢第乙個小於或等於num的數字
//找到返回該數字的位址,不存在則返回end。
//通過返回的位址減去起始位址begin,得到找到數字在陣列中的下標。
upper_bound(begin, end, num, greater())
//從陣列的begin位置到end-1位置二分查詢第乙個小於num的數字
//找到返回該數字的位址,不存在則返回end。
//通過返回的位址減去起始位址begin,得到找到數字在陣列中的下標。
sort(num, num + 6, cmp);
//按從大到小排序
int posa =lower_bound(num, num + 6, 7, greater()) - num;
//返回陣列中第乙個小於或等於被查數的值
int posb =upper_bound(num, num + 6, 7, greater()) - num;
//返回陣列中第乙個小於被查數的值
[51nod] 1001 陣列中和等於k的數對
[51nod] 1080 兩個數的平方和
[模板] 結構體使用cmp sort 二分 的技巧 (過載) 應用51nod 四個數和為零
1.2假定解並判斷是否可行
大意:切k段長度相同的繩子求最大長度
c(x) = (floor(l/x))的總和是否 >= k
double t;
int n, k;
double arr[maxn];
bool judge(double x)
return ret >= k;
}int main()
double fst = 0.0, lst = 1010101010.0, mid;
for(int i = 0; i < 100; i++)
printf("%.2f", floor(fst * 100) / 100);
return 0;
}
在無法準確確定結束範圍時,可按次數不斷逼近 100次可達到10^-30的精度
或使用(lst - fst) > eps,但eps不可太小,容易死迴圈。
1.3最大值最小化
void solve()
return fst;
}
[二分] [poj] 2456 aggressive cows
[二分答案][洛谷] p1316 丟瓶蓋
複雜度大概在 o(n*logn)
1.4最大化平均值
現有n物的重價是w和v,選k物使得單位重量價值最大
double wei[maxn];
double val[maxn];
double jud[maxn];
int n, m;
bool cmp(double a, double b)
bool judge(double x)
int main()
printf("%.2lf\n", lst);
} return 0;
}
v[0]+v[1]+v[2]+...+v[n-1] n種物品的總價值
x * (w[0]+w[1]+w[2]+...+w[n-1]) 所猜測的單位價值為x時的總價值
v[0] - x*w[0]
v[1] - x*w[1]
v[2] - x*w[2]
......
排序之後取前k種最大的值相加
(v[n-1]+v[n-2]+..v[n-k]) = s1 與 x*(w[n-1]+w[n-2]+...w[n-k]) = s2 相比較
如果s1 >= s2 說明x的值還不夠大,s1 < s2,說明x太大了
leetcode專題訓練 二分搜尋
1 35.搜尋插入位置 給定乙個排序陣列和乙個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。你可以假設陣列中無重複元素。2 74.搜尋二維矩陣 編寫乙個高效的演算法來判斷 m x n 矩陣中,是否存在乙個目標值。該矩陣具有如下特性 每行中的整數從左...
專題二 總結(搜尋)
2016 04 24 這個專題主要就講了兩個搜尋 廣度搜尋和深度搜尋 bfs and dfs 通過做了這麼多題,總結一下,其實廣度搜尋和深度搜尋都是一種盲目搜尋,也可以叫暴力搜尋吧?需要把每個結點都搜一遍,老師說很多題都能用搜尋來解決,比如最近上課講的動態規劃問題許多就能用搜尋來解決。但它們不適合解...
專題二搜尋總結
一,二分搜尋法 二分搜尋法 是通過不斷縮小解可能存在的範圍,從而求得問題最優解的方法。在程式設計競賽特別是acm中,經常可以見到二分搜尋法和其他演算法結合的題目。二。廣搜 從初始節點開始,應用算符生成第一層節點,檢查目標節點是否在這些後繼節點中,若沒有,再用產生式規則將所有第一層的節點逐一擴充套件,...