hdu 1627 下沙的沙子有幾粒?

2021-07-09 14:10:49 字數 1180 閱讀 9838

題目鏈結

hdu_1627_下沙的沙子有幾粒

problem description:input

輸入資料報含多個測試例項,每個佔一行,由兩個整數m和n組成,m和 n 分別表示字串中h和d的個數。由於我們目前所使用的微機和老美的超級計算機沒法比,所以題目給定的資料範圍是(1<=n<=m<=20)。

output

對於每個測試例項,請輸出下沙的沙粒到底有多少,計算規則請參考「宇春猜想」,每個例項的輸出佔一行。

sample input

1 1

3 1sample output1 3

分析:

我做這道題,開始是用遞迴做的,類似 dfs 列舉了每個狀態先放 h 還是先放 d ,在測試數字在15以內的時候就可以很快得出答案,但再大就 t 了,想想也是在情理之中,他的狀態數是成指數上公升的。因此我就用遞迴對 10 以內的資料打了個表,發現了乙個遞推關係,

a[m][n] = a[m-1][n] + a[m][n-1],所以我是在完全不理解這個關係的情況下ac的 =_=! ….

現在來分析下這個式子,對於一組 m,n,a[m][n] 表示m個 h ,n個 d 滿足條件的放法,那麼怎樣從前一種狀態轉移過來呢,因為對於每種情況我們可以確定最後乙個位置放得不是 h 就是 d ,所以就可以抓住這一點來轉移了:

對於 一組m,n:

1.固定最後乙個位置放 h ,那麼前面的放法就是 a[m-1][n] 了,應該很容易理解。

2.固定最後乙個位置放 d ,則前面放法就是 a[m][n-1] 了。

由於只有這兩種互不重疊的情況,所以就有了以上的遞推公式了,最後有沒有發現和高中組合數里的乙個公式很像,c(m,n)=c(m-1,n-1)+c(m-1,n) ,貌似可以借助這個公式理解一下。

下面就見**君咯~

#include 

#include

using

namespace

std;

long

long a[21][21];

int main()

}int m,n;

while(cin>>m>>n)

HDU 下沙的沙子有幾粒?(遞推)

寫一下自己的思路歷程。1.模擬leetcode的括號匹配,採用dfs 當h的數目大於d的數目且d的數目小於n時,在字串尾增加乙個d 當h的數目小於m時,在子串增加乙個h 結束搜尋的條件是d的數目等於n且h的數目等於m,結束時檢查得到字串是不是符合要求,如果是則ans 最後輸出ans 結果是交上去血t...

下沙的沙子有幾粒

input 輸入資料報含多個測試例項,每個佔一行,由兩個整數m和n組成,m和 n 分別表示字串中h和d的個數。由於我們目前所使用的微機和老美的超級計算機沒法比,所以題目給定的資料範圍是 1 n m 20 output 對於每個測試例項,請輸出下沙的沙粒到底有多少,計算規則請參考 宇春猜想 每個例項的...

ACM HDOJ 下沙的沙子有幾粒?

problem description 2005年11月份,我們學校參加了acm icpc 亞洲賽區成都站的比賽,在這裡,我們獲得了歷史性的突破,儘管只是一枚銅牌,但獲獎那一刻的激動,也許將永遠銘刻在我們幾個人的心頭。藉此機會,特向去年為參加acm亞洲賽而艱苦集訓了近半年的各位老隊員表示感謝。實際上...