UVa 10198 - Counting
UVa 10198 - Counting
( Tip: 點擊左上方的三橫槓選單按鈕,可以收起左側 Pdf 頁。)
Step 1. 題目概要
給定一個數字
n
,求有多少種由1,2,3,4
所構成的串位數之和為n。數字4要視為1。
- 例如:
n
=3,則符合規則的共會有13種:- 111 = 1+1+1
- 114 = 1+1+1
- 141 = 1+1+1
- 144 = 1+1+1
- 411 = 1+1+1
- 414 = 1+1+1
- 441 = 1+1+1
- 444 = 1+1+1
- 12 = 1+2
- 42 = 1+2
- 21 = 2+1
- 24 = 2+1
- 3 = 3
Step 2. 解題思路
- 本題有兩個要點:一是動態規劃,二是大數運算。
- 首先先做dp遞迴建表:
- dp[n]=k 表示寫出數字n的方式有k種
- 在這些序列中,以1開頭的序列總數為dp[n-1],以2開頭的序列總數為dp[n-2],以3開頭的序列總數為dp[n-3],以4開頭的序列總數為dp[n-4],而由於4的值必須視為1,故dp[n-4]=dp[n-1]
- 因此推廣公式後得到:dp[n]=dp[n-1]+dp[n-2]+dp[n-3]+dp[n-1] 開始遞迴
- 邊界條件:dp[1]=2; dp[2]=5; dp[3]=13
- 接下來將處理大數運算:
- 當數值超過10000時便進行壓縮一次,重複處理直到計算完畢
- 首先先做dp遞迴建表:
Step 3. 範例輸入與輸出 - Sample Input and Output
Step 4. 參考程式碼 - Accepted Code
1 |
|
評論