原创 與概率相關的算法題C++解法(附證明過程)

一、常考題型 1、客觀題(選擇題); 2、古典概率、期望的計算,不涉及高等概率和微積分; 3、利用隨機來改進著名的算法(快速排序); 4、隨機數發生器(根據給定的隨機數發生器構造另一個)。 二、練習題 1、有2k只球隊,有k-1個強隊,其

原创 用實例講解棧和隊列(C++)

一、棧和隊列 1、實現一個新型的棧結構,具有pop、push、top、size和getMin操作。 解法:用兩個普通棧實現。 class Solution { public:     stack<int> data,minData

原创 MathProg語言簡介(附帶例子)

綜述:我們在使用很多數學求解器時,會用到MathProg模型語言。MathProg語言能將一個純數學語言描述的模型轉化爲求解器能讀懂的格式。例如在使用線性規劃求解器GLPK求解一個線性規劃問題或者混合整數規劃問題時,就需要用到MathPr

原创 一些可以用動態規劃(DP)算法解決的問題(C++)

一、動態規劃問題 來源:暴力搜索->記憶式搜索->經典的動態規劃->改進的動態規劃。這也是動態規劃問題的求解步驟。 本質:利用空間來換取時間。把一個問題分解爲相同的子問題,這些子問題的求解是有順序的,按順序一步一步求解,前面的步驟和決策使

原创 二分查找的巧妙運用(C++)

一、二分查找 1、查找無序數組中的任意一個局部最小值 局部最小值:arr長度爲1時,arr[0]是局部最小。arr的長度爲N(N>1)時,如果arr[0]<arr[1],那麼arr[0]是局部最小;如果arr[N-1]<arr[N-2],

原创 一些智力題的C++解法

1、在一個nxm的格子圖上塗色,你每次可以選擇一個未塗色的格子塗上你開始選定的那種顏色。同時爲了美觀,我們要求你塗色的格子不能相鄰,也就是說,不能有公共邊,現在問你,在採取最優策略的情況下,你最多能塗多少個格子? 解法:第一個格子要選相鄰

原创 位運算在算法題中的使用(C++)

一、算術運算符和位運算符 算術運算符:+、-、*、/、% 位運算符:&按位與、|按位或、^按位異或、~按位取反、<<左移右側補0、 >>右移左側補符號位、 >>>右移左側補0 注意:移位運算一定要賦值。也就是說將a左移2位不應該是a<<

原创 STL中堆和優先隊列的使用方法

一、heap #include<algorithm> make_heap(首位置, 尾位置+1, 可選的cmp函數);  -> 構造堆,將數組堆化push_heap(首位置, 尾位置+1, 可選的cmp函數);  -> 添加元素到底層容器