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

2021-09-26 11:13:19 字數 805 閱讀 7157

寫一下自己的思路歷程。。

1.模擬leetcode的括號匹配,採用dfs(當h的數目大於d的數目且d的數目小於n時,在字串尾增加乙個d)當h的數目小於m時,在子串增加乙個h;結束搜尋的條件是d的數目等於n且h的數目等於m,結束時檢查得到字串是不是符合要求,如果是則ans++;最後輸出ans

結果是交上去血t;

由此想到第二種做法,由於n,m都不大,最多209個測試用例,因此想到可以打表來做

2.dfs + 打表

結果:在n = 15,m = 16的時候已經非常慢了,等不下去了。。。

3.遞推

不過觀察之前的打表結果(自己想也可知)

如果我們用dp[i][j]來表示使用i個h,和j個d所能得到的最大方案數,那麼其**只有兩個,第乙個是在i >= j + 1的時候 加上的dp[i - 1][j](表示在使用i - 1個h的基礎上末尾新增乙個h) 另外乙個是在i >= j - 1的時候加上dp[i][j - 1](表示在使用j - 1個d的基礎上再新增乙個d)

於是先把錶打好;對於每個詢問使用o(1)的時間輸出答案即可。。

#include

using

namespace std;

long

long dp[30]

[30];

int m,n;

intmain()

if(i >= j -1)

}}while(~

scanf

("%d %d"

,&m,

&n))

return0;

}

下沙的沙子有幾粒

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

hdu 1627 下沙的沙子有幾粒?

題目鏈結 hdu 1627 下沙的沙子有幾粒 problem description input 輸入資料報含多個測試例項,每個佔一行,由兩個整數m和n組成,m和 n 分別表示字串中h和d的個數。由於我們目前所使用的微機和老美的超級計算機沒法比,所以題目給定的資料範圍是 1 n m 20 outpu...

ACM HDOJ 下沙的沙子有幾粒?

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