原创 ACM第二專題—搜索總結

概述:搜索分爲廣度優先搜索(BFS)和深度優先搜索(DFS)兩類,前者用隊列實現,後者用遞歸實現,後者用於列舉所有可能情況,前者用於求最短路徑。可以用二分搜索和三分搜索解決一些比較簡單的搜索問題。 例題: 1.求連通塊(DFS) 部分代碼

原创 ACM第二次練習—1013&1014

題意:在一個N層高的樓有一個奇怪的電梯,在每一層只能上升或下降一個特定的層數,中間不會停止,在給定的條件下,問能不能到達指定樓層,可以到達的話返回轉操作次數,不可以的話返回-1。 思路:這個題問能不能實現,所以用最快的速度找到可行解就可以

原创 ACM第二次練習—1026

題意:自從2006年3月10日至11日的首屆數獨世界錦標賽以後,數獨這項遊戲越來越受到人們的喜愛和重視。<br>據說,在2008北京奧運會上,會將數獨列爲一個單獨的項目進行比賽,冠軍將有可能獲得的一份巨大的獎品———HDU免費七日遊外加l

原创 ACM第三次練習—1004

題意:求醜數,就是因子只含2,3,5,7.若一個數n是醜數,則必定有n=2^a*3^b*5^c*7^d,因此只需求出所有的醜數,對其進行排序即可。 思路:每個數都可以分解成有限個2 3 5 7 的乘積,dp方程爲 dp[i]=f[i]=m

原创 ACM第二次練習—1023

題意:輸入8個數 表示 圖中a b c d e f g h的位置的值只能爲1-8的數 然後相鄰的不能是連續的數,即絕對值不能爲1,有些數是0,將爲0的填成1-8中未使用的數。有多少種方法,如果僅有一種,輸出它;有多種或沒有, 按樣例中那

原创 ACM第三次練習—1013

題意:有一頭母牛,它每年年初生一頭小母牛。每頭小母牛從第四個年頭開始,每年年初也生一頭小母牛。編程實現在第n年的時候,共有多少頭母牛? 思路:依然是列舉出了前幾種情況,然後很快就找到了DP公式:f(n)=f(n-1)+f(n-3)。 感想

原创 ACM第三次練習—1001

題意:給出序列a [1], a [2], a [3] ...... a [n],計算子序列的最大總和。 思路:最大子序列是要找出由數組成的一維數組中和最大的連續子序列。方法是:只要前i項和還沒有小於0子序列就一直往後擴展,否則丟棄之前的子

原创 ACM第二次練習—1008

題意:A有1數m,B來猜.B每猜一次,就說太大,太小或對了。問B猜n次可以猜到的最大數。  思路:猜n次,你能猜到的最大數的數爲2^n-1.我們也可認爲,在數1到2^n-1間,我們都可以在n次內猜出來。 感想:也許這個題也能用二分,但是我

原创 ACM第二次練習—1005

題意:輸入車的長l和寬w和當前所在街道寬x和轉彎后街道的寬y;計算車能不能拐過這個彎,能輸出Yes,不能輸出No。 思路:首先需要推到一個公式,設i爲汽車最右端點與拐點的水平距離,h爲汽車頭離拐點最高的距離,汽車內側與牆角所成的角度爲a;

原创 ACM第三次練習—1011

題意:有一只經過訓練的蜜蜂只能爬向右側相鄰的蜂房,不能反向爬行。請編程計算蜜蜂從蜂房a爬到蜂房b的可能路線數。 思路:題目中沒有圖,去百度了下,然後簡單的寫了下前幾個數之間可能對應的路線數就找到了DP公式:a[i]=a[i-1]+a[i-

原创 ACM第三次練習—1005

題意:把給定的長方體(不限)疊加在一起,疊加的條件是,上面一個長方體的長和寬都比下面長方體的長和寬短;求這些長方體能疊加的最高的高度。 思路:每塊積木最多有3 個不同的底面和高度,我們可以把每塊積木看成三個不同的積木,那麼n種類型的積木

原创 ACM第三次練習—1006

題意:如下所示的數塔,要求從頂層走到底層,若每一步只能走到相鄰的結點,則經過的結點的數字之和最大是多少? 思路:此題採用動態規劃從自頂向下計算,如果我們要知道所走之和最大,那麼最後一步肯定是走最後排數其中一個,向上退,倒數第二步肯定走最後

原创 ACM第二次練習—1019

題意:在N*N的方格棋盤放置了N個皇后,使得它們不相互攻擊(即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。你的任務是,對於給定的N,求出有多少種合法的放置方法。 思路:X(j)表示一個解的空間,j表示行數

原创 ACM第二次練習—1011

題意:在一個網格矩陣中尋找不同油礦 , 當遇到“@”時 , 這個點上 下 左 右 斜角上是“@”的點屬於同一個油礦。找到最多一次能連接幾個油礦。 思路:深度優先搜索,遞歸。 感想:雖然是個講過的例題,但自己寫出來也是有自豪感。 代碼: #

原创 ACM第二次練習—1017

題意:有一瓶體積爲S的可樂,另外有兩個空的體積分別是n,m的杯子,問:能否平分可樂,如果能輸出最少倒多少次才能平分。 思路:明確目標狀態是有兩個杯子都是S/2,那麼,只要找到這狀態就行,可從開始狀態出發,把每一種出現的狀態都找出來,並