1. 程式人生 > >【CCF-CSP-2013-12-4有趣的數】 DP

【CCF-CSP-2013-12-4有趣的數】 DP

2013-12-4-有趣的數

題目連結
http://118.190.20.162/view.page?gpid=T2
題解

滿
本題考察點在於觀察滿足性質的序列種類,發現種類並不多
13 13 一共有13個合法狀態,於是我們只要可以推理出13個合法狀態之間的轉移方程就可以。
13 首先我們給出13個合法狀態:
1 1 1 1 由1轉移 ----1狀態
2 2 2 2 由 2 轉移 ----2狀態
3 3 3 3 由 3 轉移 ----3狀態
02 2   4 4 02 由 2 \ 4轉移 ----4狀態
03 3   5 5 03 由 3 \ 5 轉移 ----5狀態
12 1   2   6 6 12 由1 \ 2 \ 6 轉移 ----6狀態
13 1   3   7 7 13 由1 \ 3 \ 7轉移 ----7狀態
23 2   8 8 23 由 2 \ 8 轉移 ----8狀態
012 4   9 9 012 由 4 \ 9 轉移 ----9狀態
013 5   10 10 013由 5 \ 10 轉移 ----10狀態
023 4   8   11 11 023 由 4 \ 8 \ 11轉移 ----11狀態
123 6   12 12 123 由 6 \ 12 轉移 ----12狀態
0123 9   11   13 13 0123 由9 \ 11 \ 13 轉移 ----13狀態
d p [ i ] [ j ] i j 我們定義dp[i][j]為數字長度為i狀態為j的數字種類數
很明顯初始狀態的定義為:
d p [ 1 ] [ 1 ] = 1 , d p [ 1 ] [ 2 ] = 1 , d p [ 1 ] [ 3 ] = 1 ; dp[1][1]=1,dp[1][2]=1,dp[1][3]=1;
我們很容易得到狀態轉移方程:
d p [ i ] [ 1 ] = d p [ i 1 ] [ 1 ] ; dp[i][1]=dp[i-1][1];
d p [ i ] [ 2 ] = d p [ i 1 ] [ 2 ] ; dp[i][2]=dp[i-1][2];
d p [ i ] [ 3 ] = d p [ i 1 ] [ 3 ] ; dp[i][3]=dp[i-1][3];
d p [ i ] [ 4 ] = d p [ i 1 ] [ 2 ] + 2 d p [ i 1 ] [ 4 ] ; dp[i][4]=dp[i-1][2]+2*dp[i-1][4];
d p [ i ] [ 5 ] = d p [ i 1 ] [ 3 ] + 2 d p [ i 1 ] [ 5 ] ; dp[i][5]=dp[i-1][3]+2*dp[i-1][5];
d p [ i ] [ 6 ] = d p [ i 1 ] [ 1 ] + d p [ i 1 ] [ 2 ] + 2 d p [ i 1 ] [ 6 ] ; dp[i][6]=dp[i-1][1]+dp[i-1][2]+2*dp[i-1][6];