原创 Copying Books UVA - 714

比較經典的一個題目,考察的既不是滑動窗口也不是動態規劃,考察的其實是二分法,二分的範圍是從序列中的最大值到序列的所有的元素之和。每次二分計算出對應的mid值,然後判斷是否能夠將序列劃分成爲不超過k個部分,每個部分的值都不超過mid,如果可

原创 Uva 1608 Non-boring sequences

思路和紫書一樣,首先記錄每個數字前面和該數字一樣的下標,以及後面與該數字一樣的下標,然後從0到n-1的區間開始判斷,如果能夠找到以某個唯一出現的數字爲中心點,左邊的序列滿足條件並且右邊的序列也滿足條件,那麼最後就能得出該序列是“non b

原创 Uva 11572 Unique snowflakes

比較簡單的一道題目,一邊遍歷數據一邊記錄已經遍歷的數據,同時在遍歷的時候還要判斷該數據是否之前已經被遍歷過,如果被遍歷過,那麼就將該數據以及之前已經遍歷到的數據清除,同時要注意記錄遍歷的數據的最大的長度,最後輸出結果即可,具體實現見如下

原创 Fabled Rooks UVA - 11134

比較簡單的一道題,關鍵在於抓住一點:可以對行以及隊列進行分開處理,行列的處理彼此之間是沒有影響的。每次都選出滿足條件的右邊界最小的點,如果滿足要求就繼續下一輪的遞歸求解,如果不滿足要求返回false結束即可,具體實現見如下代碼: #inc

原创 4 Values whose Sum is 0 UVA - 1152

比較簡單的一道題目,對於序列A和B,統計出二者中所有的元素之和,並且記錄在數組sum中,然後對於序列C和D中的任意的元素之和t,找出sum中-t的個數並且統計。最後將結果輸出即可,具體實現見如下代碼: #include<iostream>

原创 uva1606 Amphiphilic Carbon Molecules

題目的主要思想在於依次選定一個節點,然後再選定剩下的另外一個節點,然後判斷以這兩個節點確定的直線作爲邊界,相應的黑色節點的個數以及白色節點的個數的最大值,這裏也使用了一個很重要的方法,將黑色節點的位置進行中心對稱,這樣就將求解白色節點以及

原创 Gates UVA - 1607

最多僅僅只有一個位爲x,其餘的位均爲0或者1。首先計算出全0以及全1的輸入所對應的輸出,如果二者是相等的,說明輸出其實就是一個常數,那麼我們就直接將輸入指定爲全0就可以了。如果二者不是相等的,那麼就可以考慮全0的輸入所對應的輸出以及全1

原创 Erratic Expansion UVA - 12627

比較簡單的一道題目,關鍵是找出遞推的關係就可以了,這個題目中記f(K,A)表示的是K小時之後前面A行所擁有的紅色氣球的個數,那麼最終的結果其實也就是f(K,B)-f(K,A-1),那麼只需要遞歸的計算f就可以求出最終的結果了。分析題目中的

原创 Just Finish it up UVA - 11093

假設當前從p點開始進行判斷,如果僅僅只能走到q點,那麼我們下次就從q+1點開始進行模擬與判斷,因爲從p點到後續的點如果可達,那麼到達後續的點的油量>=0,此時如果從這些點都不能繼續向後推進,那麼再次判斷油量爲0的情況就沒意義了,也就是重複

原创 Bin Packing UVA - 1149

很簡單的一道題目,將輸入的數據進行從小到大排序,然後分別從最左邊以及最右邊開始進行判斷,如果最左的值以及最右的值之和超過了上限,那麼就只能將最右的物體單獨放在一個包中,同時將最右邊的下標更新,如果二者的值之和沒有超過上限,那麼就將二者同時

原创 Wine trading in Gergovia UVA - 11054

很簡單的一道題目,關鍵在於意識到每個酒莊最終剩餘的數量均爲0,那麼從第一個酒莊的酒也就需要不斷的向外轉移,那麼需要工作量也就是第一個酒莊藏酒量的絕對值(可以將藏酒量看作爲負值),那麼從第一個酒莊轉移到第二個酒莊就繼續向後轉移,這裏能夠保證

原创 Foul Play UVA - 1609

思路和紫書相同,首先記錄隊伍1能夠打敗哪些隊伍,以及哪些隊伍會打敗隊伍1,然後對於那些會打敗隊伍1的隊伍,每次都從隊伍1能夠贏的隊伍中找出某一隊,正好打敗這個隊伍,如果找不到,那麼就將這些隊伍放置到容器fin中,以便後續處理,然後從隊伍1

原创 UVA 12265 Selling Land

思路同紫書,解法很巧妙,逐行求解,設置一個數組height記錄當前掃到的某一行的某一個格子之後,對應這個列的高度,同時設置一個棧結構來進行記錄。如果當前掃到的是‘#’,那麼就將這一列對應的高度記爲0,同時清空棧,如果掃到的爲‘.’,那麼就

原创 Cav UVA - 1442

思路同紫書一致,首先找出向右方延伸每一個點不會觸碰到頂的高度,並且將這些高度記錄到一個數組中,然後考慮向左延伸不會觸碰的頂的高度,求出這個告訴和之前記錄的另外的一個方向的最下值,將這個最小值減去底的高度,將所有求出的結果進行求和即可,具體

原创 Defense Lines UVA - 1471

利用兩個數組g[i]代表的是以i爲結束點的連續遞增數列的最大的長度,f[i]代表的是以i爲起點的連續遞增數列的最大長度。那麼答案肯定是某一個g[j]+f[i],同時j<i。在這個題目當中我們就定義自己的數據結構node,node中data