原创 POJ 3264 Balanced Lineup(第一道線段樹)

是summer training code section裏的一道題目,當時沒有做出來。由於第一次接觸線段樹,一開始嘗試用min_element() 和 max_element(),結果必然是TLE了。。 另外這道題目的坑爹之處就是用 c

原创 LightOJ 1006 C Hex a bonacci (取模、水~)

這道題目比較有新意,給出了一段代碼,然後要優化這段代碼,完成相同的功能,但是要減少時間、空間複雜度。其實題目本身不是很難,可惜自己太菜,又TLE,又

原创 POJ1176 (規律循環)

問題:   有N個開着的燈,和控制這個N個燈的四個開關。四個開關作用不同。第一個開關:flip所有的燈。第二個開關:flip奇數編號的燈。第三個開關:flip偶數編號的燈。第四個開關:flip編號爲3 * K + 1 的燈,其中K = 0

原创 POJ 3468 A Simple Problem with Integers(線段樹、lazy思想)

題目大意是給出一串數學,之後可能對某個區間內的所有數字都增加一定的量,也可能對某個區間進行查詢,要求返回這個區間內所有數字的和。 Training 給出了8 道關於線段樹的題目,手氣好第一道就抽中最簡單的。但是還是被折騰了不少時間,一開始

原创 HDU 2602 Bone Collector(01揹包,DP)

典型的01揹包。第一次做~ 用f [ i ][ j ] 來表示當處理到第 i 項物品,並剩 j 容量時的最大價值。 那麼 f [ i ][ j ] = max( f [ i - 1 ][ j ], f[ i - 1 ][ j - volu

原创 POJ 1789 Truck History (MST.Prim)

感覺還是理解題目比較難一些。。 算法還是Prim,沒有特別 的變化。之前都按自己的理解寫的Prim,這次看了算法導論中的僞代碼,原來Prim還有更快速的實現方法。這個方法把與樹的距離用一個域儲存了一起,這樣就不用每次都查找與樹相鄰的邊了。

原创 POJ 1274 The Perfect Stall (第一道二分圖最大配對)

看了別人解釋了什麼是二分圖後,纔想起來原來離散數學中講的 Bipartite Graph 就是它。 這道題是最大配對問題,用到了匈牙利算法。其實理解了就不難,主要有三步: <1> 讀取數據,並用一種數據結構表示(鄰接矩陣,鄰接表都行) <

原创 POJ 3041 Asteroids (二分匹配.Hungary)

把行、列分別看作二分圖的左、右邊,若在座標(i,j)處有一點,則左邊的第 i 點與右邊的第 j 點相連。此二分圖的最大匹配數就是答案。 至於是什麼原理,沒有搞懂。。好像是關於最小覆蓋什麼的。最大匹配即是最小覆蓋,應該有人證過。 二話不說,

原创 POJ 2352 Stars(樹狀數組)

有一些點,某個點的 level 被定義爲在它左下的點的個數,問各 level 各有多少點。 由於輸入時 y 座標是增序來的,所以可以忽略 y,用一個樹狀數組 c [ x ] ,來表示目前在座標 x 以左的點的個數。 #include<i

原创 提取POJ archive中的AC代碼(第一個Linux shell腳本)

想把自己AC的代碼全部弄出來,可是POJ 的 Archive 把每道題都分了一個文件夾,手工一個一個移出來實在麻煩,於是有了這個腳本。 #!/bin/sh cd poj for i in `seq 1000 4000` do if [

原创 POJ 2253 Frogger (最小生成樹.Prim)

從點 1 開始生成最小生成樹,直到將點 2 加入到樹中,返回樹中最大的邊即可。 基本算法是Prim。 #include<iostream> #include<cmath> #include<cstdio> #define FOR(i,

原创 POJ 1125 Stockbroker Grapevine (最短路徑.Floyd-Warshall)

將這N個點依次作爲源點,求最短路徑,只要把這些最短路徑中的最小值輸出。 Floyd-Warshall算法其實就是用到了DP。求 i 到 j 的最短路徑,k 爲中間點編號的最大值,i 到 j 的最短路徑要麼包括 k, 要麼不包括 k。 #

原创 POJ 1062 昂貴的聘禮(最短路徑.Dijkstra)

因爲有等級限制,關鍵是要枚舉所有可能的情況。例如 M = 2, 酋長的等級是 4,那麼所有能參與交易的人的等級要麼是 2 ~ 4, 要麼是 3 ~ 5, 要麼是 4 ~ 6。只要把不能參加交易的人排除,算出最短路徑即可。然後取各種情況中的

原创 SyntaxHighlighter的使用方法

寫網頁,想高亮代碼,一種常見的方法就是使用SyntaxHighlighter。 首先進入官方頁面下載壓縮包。 解壓後發現有好幾個文件夾,裏面有好多css、js文件。 下面是具體的使用方法: 其實是抄官方的installation說明的,自

原创 POJ 1860 Currency Exchange (最短路徑.Bellman-Ford)

用到的是 Bellman-Ford 算法。有些不同的是標準的 Bellman-Ford 是求最短路徑的,而這道題有求最大路徑的意思。需要判斷的是是否有迴路,這裏也跟標準的判斷是否有負權迴路有所不同,這裏判斷的是是否有“正權迴路”。 具體實