動態規劃 有趣的數(ccf)

2021-07-24 18:27:01 字數 900 閱讀 5390

題目描述:

我們把乙個數稱為有趣的,當且僅當:

1. 它的數字只包含0, 1, 2, 3,且這四個數字都出現過至少一次。

2. 所有的0都出現在所有的1之前,而所有的2都出現在所有的3之前。

3. 最高位數字不為0。

因此,符合我們定義的最小的有趣的數是2013。除此以外,4位的有趣的數還有兩個:2031和2301。

請計算恰好有n位的有趣的數的個數。由於答案可能非常大,只需要輸出答案除以1000000007的餘數。

解題思路:ccf的測試資料恐怖到極致,以至於我見了這道題根本沒有任何暴力的想法,我知道n位數與n-1位數絕對存在著某種關係~果然!

我們假設dp[i][j]表示填到第i位數時處於第j個狀態。 

那麼共有六種合法狀態,括號表示重複出現的數字   

0--01(2)3

1--(0)1(2)3

2--01(2)(3)

3--(0)(1)(2)3

4--(0)1(2)(3)

5--(0)(1)(2)(3)

那麼這個問題就很明顯了,任何n一種狀態,都是由滿足條件的幾個n-1狀態組成的

哦對了,注意每次都要取餘~

#include/*

dp[i][j]表示填到第i位數時處於第j個狀態。

共有六種合法狀態,括號表示重複出現的數字

0--01(2)3

1--(0)1(2)3

2--01(2)(3)

3--(0)(1)(2)3

4--(0)1(2)(3)

5--(0)(1)(2)(3)

*/ int main()

printf("%i64d\n",dp[n][5]);

}return 0;

}

ccf試題有趣的數,動態規劃

關鍵 將二維陣列看作二維函式,由前面的遞推到後面 思路 之前嘗試用深度搜尋,乙個個位置試探,可是本人只能求出乙個最小的有趣數,而無法統計數量,後看到一些部落格,大多亂七八糟,敘述不明,有一篇倒是解釋的非常清楚,博主連線 問題描述 我們把乙個數稱為有趣的,當且僅當 1.它的數字只包含0,1,2,3,且...

ccf 有趣的數

問題描述 我們把乙個數稱為有趣的,當且僅當 1.它的數字只包含0,1,2,3,且這四個數字都出現過至少一次。2.所有的0都出現在所有的1之前,而所有的2都出現在所有的3之前。3.最高位數字不為0。因此,符合我們定義的最小的有趣的數是2013。除此以外,4位的有趣的數還有兩個 2031和2301。請計...

ccf有趣的數

有趣的數 時間限制 1.0s 記憶體限制 256.0mb 問題描述 問題描述 我們把乙個數稱為有趣的,當且僅當 1.它的數字只包含0,1,2,3,且這四個數字都出現過至少一次。2.所有的0都出現在所有的1之前,而所有的2都出現在所有的3之前。3.最高位數字不為0。因此,符合我們定義的最小的有趣的數是...