原创 poj 3069 Saruman's Army

貪心 覆蓋不下了就放一個新的點,一直到遍歷完數組爲止 /* PROG: Saruman's Army LANG: C++11 */ #include <cstdio> #include <cmath> #include <cstrin

原创 poj 3253 Fence Repair

貪心,類似霍夫曼編碼 每次找出 最短的兩個plank合併並加入集合中, 總共需要合併N次,每一次查找最短plank需要O(N)。 參考了別人代碼,對時間常數進行優化才能AC(記錄位置並不交換) /* PROG: Fence Repair

原创 hdoj 1158 Employment Planning

dp, 注意判斷不可達的點。 dp[i][j] 表示第i個月僱傭j個員工的最小cost,分別可以又上一個月裁員和僱人得到,選擇最優的,複雜度O(n^3). /* PROG: Employment Planning LANG: C++11

原创 Leetcode Integer to Roman

int indexOf(char ROMAN[7], char c){ for(int i = 0; i < 7; i++){ if(ROMAN[i] == c)

原创 hdoj 1041 Computer Tranformation

找規律+大數加法,  a[i] = a[i-2] + a[i-1]; /* PROG: Computer Transformation LANG: C++11 */ #include <cstdio> #include <cmath>

原创 hdoj 1207 漢諾塔II

動態規劃:分拆成兩個子問題,N個圓盤移動,可以分成兩個小的圓盤堆,其中一個圓盤堆較大,另一個較小,較小的圓盤仍爲四柱漢諾塔問題,較大的圓盤堆只能使用三個柱子,根據題目,由2^N-1的通項公式。 dp[n] = min(dp[i] * 2

原创 Leetcode Reverse Integer

OJ要求溢出返回0而不是溢出的數,不錯一次咋能知道要求是0。。。。 int reverse(int x) { const int MAX = 0x7FFFFFFF; bool negative

原创 hdoj 1058 Humble Number

主要的思想就是dp, 轉移方程不大明顯,但是比較容易想。 下一個醜數由之前的醜數乘{2,3,5,7}中最小且大於上一個數的數得到。先把所有數算出來然後打表輸出。輸出太噁心了,還考人英語。。 /* PROG: humble number

原创 堆(heap)的實現

key concept: 1. left child: 2i+1, right child: 2i+2 2. insert an element: add to the end and move up 3. delete: move th

原创 Leetcode Longest Substring Without Repeating Characters

有幾點需要向面試官問清楚: 1. 是26個字母還是ascii字符 2. 是否區分大小寫 解題思路:開一個長度爲256的數組記錄每一個字符出現的位置,如果出現重複就把字符串起始位置設置成i+1, 並計算當前字符串的長度,和max進行比較,保

原创 Leetcode Longest Palindromic Substring

以每個元素爲中心點往兩邊找回文,這一題用dp並不方便。 有奇數長度和偶數長度兩種情況 string longestPalindrome(string s) { string ans; int ma

原创 poj 3253 Fence Repair (堆的方法)

之前用N^2的方法勉強過了,900+ms 每次取出最小的兩塊板子,合併以後就推入堆,總共推N-1次,用時47ms, NlogN /* PROG: Fence Repair (heap) LANG: C++11 */ #include

原创 hdoj 1280 前M大的數

最開始的思路是: 最大的和肯定由原始序列種最大的前K個數兩兩組合產生,由於M <= 1000, 所以輸入序列中的前50個數就夠用了(50*49/2 = 1225 > 1000)。 然後用兩次stl裏的排序就能求出最大的M個數了,不知道爲啥

原创 poj 2431 Expedition

求最少的加油次數,貪心的思想每次加油都儘可能加多的油。所以經過的加油站的油存在一個最大堆裏,加油後pop() 在poj 3253裏實現過堆了,就用了priority_queue 一個讓代碼稍微簡潔一些的技巧是添加第N+1個加油站,距離0,

原创 hdoj 1002 A+B Problem II

原來一直比較煩大數題,寫了兩個慢慢好了,幾點注意以下 1.變量名以後要養成習慣和規律 2. printf輸出string要轉換成c_str() /* PROG:A + B Problem LANG: C++11 */ #include