![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
uva
文章平均质量分 75
unixcsir
Coding Every Day~
展开
-
11300 Spreading the Wealth
uva 對於這個題目一開始完全沒有思路,看了題解才恍然大悟原來可以這麼巧妙的,數學真是美妙~由於問題給出的條件可以知道每個人最終持有的金幣數量: M = sum(coin[i])/n.對於每個人可以傳遞的方案只有兩種,1.傳給左邊的一個,i -> i-1,2.傳給右面的一個i-1 -> i由於圍着坐可以看成一個還,設:xi表示第i個人給第i-1個人xi個金幣,如果xi是正數表示第i個人給了第原创 2013-04-01 21:20:43 · 409 阅读 · 0 评论 -
uva_900 - Brick Wall Patterns( 遞推 )
題意:給你無限個1*2的矩形,求能組成多少個以n爲底的矩形的不同形狀的矩形分析:因爲增加的矩形爲1*2,所以假設要求當前的以n爲底的矩形,那只能從n-2的個數上增加一個1*2的矩形 + 從n-1的個數上增加一個2*1的矩形,忽略重複的因爲這個不影響最終結果,自己想想吧即:f[n] = f[n-1]+f[n-2].Code:#include #include #include #i原创 2013-04-15 10:43:03 · 509 阅读 · 0 评论 -
uva_10905_Children's Game( 貪心好題 )
題意:給定n個正整數,你的任務就是把他們連接成一個最大的整數分析:排序後直接輸出是不行的,反例:13, 1312如果兩個數字的位數相等,那麼可以直接判斷,如果不等的話,對於某個數字要麼在前,要麼在後,枚舉這兩種情況就可以了Code:#include #include #include #include #include #include #include #include原创 2013-04-23 15:48:31 · 401 阅读 · 0 评论 -
uva_100 The 3n + 1 problem( DP )
題意:經典問題。分析:如果直接算,估計要TLE了,其實對於求n的循環長度,如果n是奇數那麼只需要知道3*n+1的循環長度,如果n是偶數那麼只需要知道n/2的循環長度,容易想到的是分治+記憶化Code:#include #include #include #include #include #include #include #include #include #incl原创 2013-04-15 14:38:06 · 496 阅读 · 0 评论 -
uva_11069_A Graph Problem( DP )
題意:簡單明遼,略。分析:狀態:f[i][j]表示序列i到j的最大集和數量狀態轉移:f[i][j] 那麼有兩種選擇:1.選擇第i個,那麼第i+1個就不能選擇,這就跟f[i+2]有關了2.選擇第i+1個,那麼第i個和第i+1個都不能選擇,這就跟f[i+3]有關Code:#include #include #include #include #include #include原创 2013-04-15 08:46:05 · 446 阅读 · 0 评论 -
uva_10859_Placing Lampposts( 樹形DP )
題意:在一個n個節點,m條邊的無向無環圖中的節點中放置街燈,一個結點放置街燈那麼與這個結點爲頂點的邊都被照亮,使得每條邊都有被照亮的最少放置街燈的前提下,使得被兩個街燈照亮的邊儘量的多分析:在這裏的被兩個燈照亮的邊儘量的多,變一下:使得被一個燈照亮的邊儘量少無向無環圖也就是森林, 對於求兩個變量的最小設一個等式: x = aM+c, 其中a是需要最少的燈,c是一個燈照亮的邊數量,目標就是使原创 2013-04-15 20:07:46 · 387 阅读 · 0 评论 -
uva_11627_Slalom( 二分 )
題意:題目意思比較就是有n個障礙你必須通過,障礙的左面的座標已經給出,障礙的縱座標單調遞增,你有s個鞋子,每個鞋子的垂直速度是sj, 且你的水平速度不能大於vh,問最快通過所有障礙的鞋子的最大速度是多少?分析:由於橫速度恒定,二分枚舉速度。只要將當前障礙到下一個障礙之間的距離分解,然後求出下一個橫區間的範圍,然後判斷這個區間是否為合法區間就得出這個速度是否可行Code:#inc原创 2013-04-24 15:15:26 · 425 阅读 · 0 评论 -
LA_3983 Robotruck( 單調DP )
題意:一個機器人,收拾垃圾,收拾垃圾必須按照順序(性質很明顯),收拾完垃圾必須回到原點,兩點之間的距離是哈曼噸距離分析:很容易想出狀態O(N*M)的DP算法可惜狀態個數太多了,不得不這樣想:f[i]表示機器人收拾完第i個垃圾並且回到了原點所需要的最小距離這裏令ori[j] 表示第j個垃圾到原點的距離dis[i], 垃圾1,2,3,... i的距離不難推出狀態轉移: f[i] = mi原创 2013-04-16 20:35:36 · 445 阅读 · 0 评论 -
uva_10125_Sumsets( 二分 )
題意:給你一個整數集合,要求你從中找出一個最大的d,使得a+b+c=d,其中a,b,c,d都是集合s中的不同元素分析:如果暴力的話O(N^4),但是可以使用二分解決,就是美劇a+b後對其結果排序,接着枚舉d-c如果二分查找a+b的結果中存在a+b = d-c,那麼這個d就是一個解時間複雜度O(N^2*log(N*N))Code:#include #include #in原创 2013-04-26 15:41:14 · 442 阅读 · 0 评论 -
uva_10827_Maximum sum on a torus( 普通DP )
題目:最大子矩陣,只不過行和列都可以向外延伸分析:簡單的DP,略Code:#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;#原创 2013-04-26 13:03:27 · 444 阅读 · 0 评论 -
uva_10167_Birthday Cake( 窮舉+卡精度 )
題意:給你一系列的點,讓你找出一條直線AX+BY=0, 使得直線把這些點劃分爲兩個部分分析:由於題目給出的AB範圍小且爲整數,直接暴力可以過,不過這裏要注意精度問題,判斷是否在直線上不能直接與zero比較Code:#include #include #include #include #include #include #include #include #in原创 2013-05-03 21:39:02 · 426 阅读 · 0 评论 -
uva_11584_Partitioning by Palindromes( DP )
題意:給你一個字符串,讓你去劃分該字符串,目標使得劃分出最小的回文串分析:一開始考慮是個區間DP,想都不想就寫了交上去,結果是TLE,後來發現數據量是10^3,區間DP的時間複雜度高達O(n^3),TLE是正常的正解:f[i]表示字符串底i個字符的時候,所能劃分的最小回文串的數量f[i] = min(f[i], f[j]+cost(j+1,i)).Code;#inc原创 2013-05-06 20:30:41 · 415 阅读 · 0 评论 -
uva_10534_Wavio Sequence( LIS )
题意:略分析:經典LIS問題,時間複雜度可以為o(nlogn),至於O(n^2)是否可行,沒有試過Code:#include #include #include #include #include using namespace std;#define REPI(i, s, e) for(int i = (s); i <= (e); i ++)#define原创 2013-05-07 11:10:02 · 478 阅读 · 0 评论 -
uva_11552_Fewest Flops( 经典DP模型 )
題意:略分析:狀態:f[i][ch],前i組以ch結尾所得的最小cnt狀態轉移:f[i][ch] = min(f[i][ch], f[i-1][chp]+cost(i, chp, ch)),其中cost(i, chp, ch)表示第i組變成目標的花費Code:#include #include #include #include #include #include原创 2013-05-07 21:25:31 · 727 阅读 · 0 评论 -
la_4727 Jump ( 经典模型变形 )
題意:略分析:如果使用單純模擬的話,時間複雜度會比較大這裡運用了DP的思想,如果知道1 到 n-1個人和k,最後退出的人的序號,那麼通過這個序號可以推算出1到n個人k的最後推出的人的序號還不懂的建議自己去磨一下.Code:#include #include #include using namespace std;const int MAXN = 500000原创 2013-05-08 16:41:44 · 593 阅读 · 0 评论 -
uva_11825_Hackers' Crackdown (狀態壓縮DP,好題)
分析:這個題目的數學模型是,把集合p1, p2, p3, ..., pn分儘量多組,使得每組的並集等於S全集,其中pi表示i於i相鄰的頂點組成的集合,每組等於一個服務把一個集合表示二進制的形式,狀態f[i]表示i所表示的集合最多分成多少組f[i] = max(f[j]| j的並集等於S)+1Code:#include #include #include #include #inc原创 2013-04-13 21:59:43 · 399 阅读 · 0 评论 -
uva_10382_Watering Grass( 貪心 )
題意:噴水裝置能否覆蓋草坪,其實隻取決於圖中每個圓藍色部分能否將草坪覆蓋,這樣我們就將問題轉化成了有若幹線段,求覆蓋一個指定區間最少要多少條線段分析:題目可以作出如下轉化:從最左開始使用貪心策略每次選擇一個包含當前最右的區間且擴張最遠的圓Code:#include #include #include #include using namespace st原创 2013-04-23 14:13:20 · 428 阅读 · 0 评论 -
LA_3213 Ancient Cipher( 排序,hash )
题意:一對字符串各有n個大寫字母,如果能組合出一個映射表的話則输出YES,否則NO.分析:簡單題,可以先對組字符串每個字符出現次數進行統計,然後排序,接着比較,時間複雜度O(n).Code:#include #include #include #include #include #include #include #include #include #include原创 2013-04-22 20:49:33 · 480 阅读 · 0 评论 -
uva_11729_Commando War(貪心)
題意:N個部下,第i個部下需要你用Bi分鐘分配任務,然後他會不間斷的執行Ji分鐘後完成任務,問給人物分配任務的順序,使得總的完成時間最小分析:按照每個人的執行任務時間大小按照降序排列,也就是執行任務時間長的人物先分配任務,證明:略Code:#include #include #include #include #include #include #include #incl原创 2013-04-09 13:44:32 · 400 阅读 · 0 评论 -
uva_10881_Piotr's Ants (模拟,Sort)
题意:給出木條長度,螞蟻開始在木條的位置和其行走的方向,如果兩個螞蟻碰撞的時候,他們會反向走,求T秒後每個螞蟻的位置分析:這個題目如果模擬的話你會感到比較複雜,但是自己在紙上模擬機組之後,會發現,忽略螞蟻編號,最後結果螞蟻的方向與開始的時候螞蟻的方向一樣,相對順序都一樣,爲什麼,位置就是每個螞蟻開始位置順着開始方向不變的行走T秒之後的位置,會這樣呢?可以這麼想:1.兩個螞蟻碰撞,反向可以看原创 2013-04-09 15:23:29 · 478 阅读 · 0 评论 -
uva_10795_A Different Task(分治)
題意:漢諾塔,給定開始局面和結束局面,問從參考局面最小需要移動多少步才能到結束局面分析:1.從最大的底盤開始考慮,如果最大的底盤在始態和終態中相同,那麼可以不考慮移動該底盤了,如果移動了該底盤那麼操作就不是最優的了2.從最大的一個不相同的底盤K開始考慮,假設開始K在A柱上,終止在C柱上,那麼K-1必須在B柱上,才能使得K從A->C,這時候假設這個局面爲中介局面使用函數表示成:f(arr,原创 2013-04-09 21:57:46 · 453 阅读 · 0 评论 -
uva_11464_Even Parity(枚舉,暴力)
題意:給你一個n*n的0,1矩陣,要求你操作最少的0邊成1,1不能變,使得n*n的矩陣變成偶數矩陣,也就是任意的一個矩陣內的元素,其上,下,左,右元素(如果存在的話)的和位偶數分析:最簡單的想法就是暴力想法,也就是枚舉每個0,變或不變,其運算量極大,在本題目的承受範圍內不能理想的運行出結果其實確定了第一行就可以確定第二行了,爲什麼?自己好好想想,不難如果這樣想的話,只需要枚舉一行的所有情原创 2013-04-09 20:48:05 · 494 阅读 · 0 评论 -
uva_11384_Help is needed for Dexter(貪心)
題意:給你一個序列S = {1, 2, 3, ..., n}, 每次可以從中選擇一些元素刪除特定的數字,當然所刪除的數字必須小於等於取出來的元素,最後使得S = {0},的最小刪除次數分析:不難想出一個DP方法:設狀態f[1,2,3...,n]爲所求當 n = 1 時,f[1] = 1.當 n = 2 時,f[1,2] = max(f[1])+1當 n = 3 時,f[1,2,3] =原创 2013-04-09 20:59:23 · 458 阅读 · 0 评论 -
uva_11078_Open Credit System(DP)
題意:給你一個長度爲N個整數序列,要求找出Ai,Aj使得(i<j), Ai-Aj最大分析:這個和最大子段和相似,這裏使用O(N)的DP解法狀態:m[i]表示從[i-1, n]的最小數值狀態轉移:m[i] = min(m[i], f[i])ans = max(f[i]-min[i])注意更新順序Code:#include #include #include using nam原创 2013-04-10 20:06:46 · 547 阅读 · 0 评论 -
uva_11549_Calculator Conundrum( 模擬 )
題意:一個計數器計算一個數的平方,只能顯示答案的前N位,給定開始的數K和N,最終會落入循環,問其中得到的最大數值是多少分析:簡單的模擬題,但是存在一種比較巧妙的方法,可以把這個循環看成兩個人在賽跑,如果速度慢的人‘超過’了速度快的人,那麼可以看成進入了還Code:#include #include #include using namespace std;#define INF原创 2013-04-10 20:36:13 · 388 阅读 · 0 评论 -
LA_3635/HDU_2333 Assemble (二分)
題意:讓你去購買不同總類的配件個一個,配件總數爲n,購買的配件總價格不能超過b,且使得所購買的配件中的質量係數中最小的最大分析:最小最大的問題,二分枚舉能不能構成不小於k的質量係數,若能構成則ans >= k,否則ans < k.Code:#include #include #include #include #include using namespace std;#de原创 2013-04-11 16:59:03 · 425 阅读 · 0 评论 -
LA_2678 - Subsequence( 二分 )
題意:一個序列S,其中的元素全部都是正整數,求最短連續的子序列,使得其和小於等於s分析:由於全部元素是正整數,設f[i]爲前i個的和,那麼f是遞增的f[j]-s >= f[i],其中i越大連續序列的長度越小,所以這裏可以使用二分求出i,時間複雜度O(nlogn).Code:#include #include #include #include using namespace s原创 2013-04-11 20:27:07 · 420 阅读 · 0 评论 -
LA_2965 Jurassic Remains
題意:給定n個大寫字母組成的字符串,選擇儘量多的串,使得每個大寫字母都能出現偶數次分析:不難想出枚舉每個字符串選擇與否的暴力算法可惜運算量高達2^24由於字符串只考慮每個字母的奇偶情況,用0表示字符出現的次數爲偶數,1表示出現的次數爲基數,可以使用stl中的map建立前n/2個字符串所有情況的映射,然後枚舉後n個的時候可以從映射中二分查找Code:#include #include原创 2013-04-12 14:35:36 · 444 阅读 · 0 评论 -
uva_10635_Prince and Princess ( LIS )
分析:如果使用LCS的DP算法,時間複雜度O(n*m),可惜這裏的n高達250*250,時間不允許的,題目說明了一個序列中的元素唯一,所以可以將序列A離散化,然後序列B中的元素如果A中存在相同的可以mark下來,如果不存在直接刪除,這樣可以轉換成LIS,時間複雜度O(nlogn).Code:#include #include #include #include #include #原创 2013-04-13 12:37:08 · 558 阅读 · 4 评论 -
uva_11039 - Building designing( 基數排序 )
題意:有n個絕對值不同的整數(非0),選出儘量多的數,排列成一個序列,正負相間且元素絕對值遞增,求最長的序列的長度.分析:可以先存下來接着使用nlogn的排序也可,這裏用了hash的基數排序Code:#include #include #include #include #include #include #include #include #include #incl原创 2013-04-22 20:36:24 · 444 阅读 · 0 评论 -
LA_3602 DNA Consensus String ( hash, 貪心 )
題意:給定m個長度爲n的DNA序列,求一個DNA序列到所有DNA序列的Hamming距離最小,兩個字符串的Hamming距離定義爲:字符不同的位置數分析:統計每一列的ACGT的數量,取最多的爲rst,然後統計Hamming距離Code:#include #include #include #include #include #include #include #includ原创 2013-04-22 21:12:01 · 515 阅读 · 0 评论 -
LA_4794 Sharing Chocolate( 狀態壓縮DP )
題意:給你一塊n*m面積的矩形,每次只切割只能橫着切或者是豎着切,問能不能切割成指定的面積的集合分析:如果使用沒有優化的DP,比較容易想到如下:狀態:f[r][c][S],表示面積爲r*c的矩形能否切割成面積的集合S狀態轉移: f[r][c][S] = 1, 當且緊當:f[r0][c][SR0] = f[r-r0][c][S^SR0] = 1 or f[r][c0][SC0] = f[r原创 2013-04-22 16:17:10 · 632 阅读 · 0 评论 -
uva_11795_Mega Man's Mission( 簡單狀壓DP )
題意:略分析:略,注意精度#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;#define REPI(i, s, e) for(i原创 2013-05-08 19:58:06 · 576 阅读 · 0 评论