問題描述
我們把乙個數稱為有趣的,當且僅當:
1. 它的數字只包含0, 1, 2, 3,且這四個數字都出現過至少一次。
2. 所有的0都出現在所有的1之前,而所有的2都出現在所有的3之前。
3. 最高位數字不為0。
因此,符合我們定義的最小的有趣的數是2013。除此以外,4位的有趣的數還有兩個:2031和2301。
請計算恰好有n位的有趣的數的個數。由於答案可能非常大,只需要輸出答案除以1000000007的餘數。
輸入格式
輸入只有一行,包括恰好乙個正整數n (4 ≤ n ≤ 1000)。
輸出格式
輸出只有一行,包括恰好n 位的整數中有趣的數的個數除以1000000007的餘數。
樣例輸入
4樣例輸出
3思路:我們通過規則可以發現,任意乙個符合要求的數的首位只能是2。那麼按照規則我們可以得出6種狀態:
1 只含有 2
2 只含有 2 0
3 只含有 2 3
4 只含有 2 0 1
5 只含有 2 0 3
6 含有全部四中數
dp [ i ] [ j ] 表示乙個 i 位數滿足第 j 中狀態。那麼這一狀態一定可以由第 i - 1 位數的每一狀態得出。
#include#include#includeusing namespace std;
#define ll long long
const int mod=1000000007;
__int64 dp[1005][7]=;
int main()
if(i>=3)
if(i>=4)
}scanf("%d",&n);
printf("%i64d\n",dp[n][6]);
return 0;
}
CCF 有趣的數 DP
問題描述 我們把乙個數稱為有趣的,當且僅當 1.它的數字只包含0,1,2,3,且這四個數字都出現過至少一次。2.所有的0都出現在所有的1之前,而所有的2都出現在所有的3之前。3.最高位數字不為0。因此,符合我們定義的最小的有趣的數是2013。除此以外,4位的有趣的數還有兩個 2031和2301。請計...
CCF習題 201312 4 有趣的數 (DP)
題意不說了,中文的題意!思路 dp思想!可以這麼想,設計乙個二維的dp i j i表示當前填第i個數,此時為第j 個狀態!第一維不用說,說說第二維!總共有四個數0,1,2,3,那麼當前該填i個數時,此時已經填了一些數,還剩下沒填的數,這個填了的數的集合就是狀態!0,1,2,3的四個數總共子集有0,1...
ccf 有趣的數
問題描述 我們把乙個數稱為有趣的,當且僅當 1.它的數字只包含0,1,2,3,且這四個數字都出現過至少一次。2.所有的0都出現在所有的1之前,而所有的2都出現在所有的3之前。3.最高位數字不為0。因此,符合我們定義的最小的有趣的數是2013。除此以外,4位的有趣的數還有兩個 2031和2301。請計...