原创 工作分配 回溯算法

設有n件工作分配給n個人。將工作i分配給第j個人所需的費用爲Cij。試用用排列樹結構設計一個算法,爲每個人都分配1件不同的工作,並使得總費用達到最小。 使用c[i][j]表示將工作 i 分配給第 j 個人所需的費用 使用sign[

原创 C++實現 leetcode687.最長同值路徑

給定一個二叉樹,找到最長的路徑,這個路徑中的每個節點具有相同值。 這條路徑可以經過也可以不經過根節點。 注意:兩個節點之間的路徑長度由它們之間的邊數表示。 示例1 輸入: 5 / \ 4 5

原创 C++實現 leetcode兩數之和

題目描述: 給定一個整數數組 nums 和一個目標值 target,請你在該數組中找出和爲目標值的那 兩個 整數,並返回他們的數組下標。 你可以假設每種輸入只會對應一個答案。但是,你不能重複利用這個數組中同樣的元素。 示例: 給定

原创 最小重量機問題-回溯算法

設某一機器由n個部件組成,每種部件都可以從m個不同的供應商處購得。設wij是從供應商j處購得的部件i的重量,cij是相應的價格。設計一個算法,給出總價格不超過c的最小重量機的設計。 w[i][j] 表示供應處 j 部件 i 的重

原创 C++實現 分治策略生成Gray碼

Gray碼是一個長度爲2^n的序列。序列中無相同元素,每個元素都是長度爲n的(0,1)串,相鄰的元素恰好只有一位不同。 下面列舉幾個低位格雷碼 1位格雷碼(2^1=2) 2位格雷碼(2^2=4) 3位格雷碼(2^3=8) 4

原创 C++實現 會場安排問題

描述:假設要在足夠多的會場裏安排一批活動,並希望使用盡可能少的會場。設計一個有效的貪心算法進行安排。 源代碼: #include <iostream> using namespace std; struct activity {

原创 數字三角形-動態規劃

給定一個由n行數字組成的數字三角形,設計一個算法,計算出從三角形的頂至底的一條路徑,使該路徑所經過的數字總和最大。 示例 7 3 8 8 1 0 2 7 4 4 4 5 2

原创 C++實現 多處最優服務次序問題

題目:設有n個顧客同時等待一項服務。顧客i需要的服務時間爲ti,1<=ti<=n。共有s處可以提供此項服務。應如何安排n個顧客的服務次序才能使平均等待時間達到最小? 平均等待時間是n個顧客等待服務時間的總和除以n。 輸入示例: n

原创 彙編語言shl/shr與sal/sar的使用

移位指令分爲邏輯移位指令和算術移位指令 shl 與 shr 屬於邏輯移位指令 shl邏輯左移指令 將寄存器或內存單元的數據左移 最低位用 0 補充 最高位進入 CF 例子: mov ax,8fh ;mov ax,10

原创 8421 BCD碼 加減校正

8421碼是一種常見的BCD(Binary-Coded Decimal)碼,它用4個二進制位表示1個十進制位: 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 …

原创 冒泡排序,簡單的排序算法

冒泡排序重複地走訪過要排序的元素列,依次比較兩個相鄰的元素 如果第一個比第二個大,就交換他們兩個 對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對 舉一個簡單的例子,這是原始數組 4 2 1 3

原创 衆數問題-分治策略

描述: 給定含有n個元素的多重集合S,每個元素在S中出現的次數稱爲該元素的重數。 多重集S中最大重數的元素稱爲衆數。 例如S={1,2,2,2,3,5}。多重集S的衆數是2,重數是3。 分治策略 首先假設中間的元素是衆數 然後

原创 C++實現 歸併排序

歸併排序的基本思想是: 將待排序的元素分成大小大致的兩個子集合, 再分別對兩個子集合調用歸併排序, 最終將排序好的子集合合併成要求的排序好的集合。 用一個8位的數組舉例: 將待排序的數組一分爲二直到只剩下一個元素

原创 0-1 揹包問題 詳細解析

給定 n 種物品和一揹包。物品 i 的重量是 wi,價值是vi,揹包的容量爲c。 問應該如何選擇裝入揹包中的物品,使得裝入揹包中物品的總價值最大。 對於每種物品 i 只有兩種選擇,裝入或者不裝入。 使用 m( x, y ) 表示最

原创 快速冪 簡單易懂

當我們想要求解 xn 的時候,通常我們使用的方法都是將 n 個 x 相乘,時間複雜度O(n) 在此基礎上使用 快速冪 可以將時間複雜度將爲O(log2n) 對於任意一個十進制數字,都可以用二進制表示 例如4: 4 = 100 =