原创 LA_3902 - Network

題意: 一個樹狀網絡,指定一個服務器s,一個距離k,與服務器相距爲k的節點都能被服務到,問服務整個網絡最少要增加多少臺服務器 分析: 這個網絡是無向的,轉成有向的比較好處理,題目給定了一個服務器,可以以這個點爲Root,把這個樹狀網絡變爲

原创 uva_11462_Age Sort(sort)

題意: 給你N個數字,每個數字範圍「1,100」, 要求你按照升序輸出它們 分析: 不難想到排序,但是這裏的N比較大,再加上測試數據比較多,即使是O(nlogn)的排序在uva上表現不是很理想 比較理想的算法是基數排序時間複雜度O(n),

原创 LA_2965 Jurassic Remains

題意: 給定n個大寫字母組成的字符串,選擇儘量多的串,使得每個大寫字母都能出現偶數次 分析: 不難想出枚舉每個字符串選擇與否的暴力算法可惜運算量高達2^24 由於字符串只考慮每個字母的奇偶情況,用0表示字符出現的次數爲偶數,1表示出現的次

原创 uva_11549_Calculator Conundrum( 模擬 )

題意: 一個計數器計算一個數的平方,只能顯示答案的前N位,給定開始的數K和N,最終會落入循環,問其中得到的最大數值是多少 分析: 簡單的模擬題,但是存在一種比較巧妙的方法,可以把這個循環看成兩個人在賽跑,如果速度慢的人‘超過’了速度快的人

原创 hdu_1969_NWERC2006_Pie(二分)

題意: F+1個人平分N個圓,第i個圓的半徑爲ri,使得每個人得到的面積相等且使得分到的面積儘量的大,每個人得到的部分不必是一個完整的圓形 分析: 初看這個題目以爲是一個數學題,二分可以說是比較完美的解決這個題目了 二分枚舉分到的面積ar

原创 uva_10905_Children's Game( 貪心好題 )

題意: 給定n個正整數,你的任務就是把他們連接成一個最大的整數 分析: 排序後直接輸出是不行的,反例:13, 1312 如果兩個數字的位數相等,那麼可以直接判斷,如果不等的話,對於某個數字要麼在前,要麼在後,枚舉這兩種情況就可以了 Cod

原创 LA_3213 Ancient Cipher( 排序,hash )

題意: 一對字符串各有n個大寫字母,如果能組合出一個映射表的話則輸出YES,否則NO. 分析: 簡單題,可以先對組字符串每個字符出現次數進行統計,然後排序,接着比較,時間複雜度O(n). Code: #include <set> #inc

原创 LA_4794 Sharing Chocolate( 狀態壓縮DP )

題意: 給你一塊n*m面積的矩形,每次只切割只能橫着切或者是豎着切,問能不能切割成指定的面積的集合 分析: 如果使用沒有優化的DP,比較容易想到如下: 狀態:f[r][c][S],表示面積爲r*c的矩形能否切割成面積的集合S 狀態轉移:

原创 Observer

C++ Code: #include <iostream> #include <map> #include <vector> #include <string> class AbstractObserver { public: vi

原创 fzu_2120_數字排列(狀態壓縮DP)

題意: 略 分析: 這個應該可以暴力,具體沒有嘗試,不過看submit有400多ms的估計就是使用暴力的,對於這個題目我是使用狀態壓縮的方法解決的 把已經選擇了的數字看成一個集合 狀態:f[s][tail_idx] 表示選擇的集合爲s且放

原创 uva_10125_Sumsets( 二分 )

題意: 給你一個整數集合,要求你從中找出一個最大的d,使得a+b+c=d,其中a,b,c,d都是集合s中的不同元素 分析: 如果暴力的話O(N^4),但是可以使用二分解決,就是美劇a+b後對其結果排序,接着枚舉d-c如果二分查找a+b的結

原创 Decorator

C++ Code: #include <iostream> class Componet { public: virtual int CalCost(void) = 0; }; class ComponetBase : publ

原创 LA_3602 DNA Consensus String ( hash, 貪心 )

題意: 給定m個長度爲n的DNA序列,求一個DNA序列到所有DNA序列的Hamming距離最小,兩個字符串的Hamming距離定義爲:字符不同的位置數 分析: 統計每一列的ACGT的數量,取最多的爲rst,然後統計Hamming距離 Co

原创 uva_11584_Partitioning by Palindromes( DP )

題意: 給你一個字符串,讓你去劃分該字符串,目標使得劃分出最小的迴文串 分析: 一開始考慮是個區間DP,想都不想就寫了交上去,結果是TLE,後來發現數據量是10^3,區間DP的時間複雜度高達O(n^3),TLE是正常的 正解: f[i]表

原创 fzu_1894 志願者選拔( 單調隊列 )

分析: 如果使用純暴力的話會TLE的,問題的‘G’只求隊列中的最大值,可以使用單調隊列這個數據結構來維護隊列中的最大值 Code: #include <set> #include <map> #include <cmath> #inclu