思路:將0-9分為四個部分:,,,
**
#include
#include
#include
using
namespace std;
//騎士跳「日」
long m =
1e9+7;
//,,,
intknightdialer
(int n)
vector<
long
>
dp1(4)
;//有四個數
dp1[0]
=4;//有兩個數
dp1[1]
=2;//有兩個數
dp1[2]
=2;//有乙個數
dp1[3]
=1; vector<
long
>
dp2(4)
;int step =1;
while
(step可以由和得到,由於下一步只能選特定乙個數,
//但是實際可選的有兩個,所以需要左移1位
dp2[0]
=((dp1[1]
+ dp1[2]
)<<1)
%m;//可以由移動一步得到,或者由移動一步得到,
//但是由出發,有兩種選擇,所以需要左移1位
dp2[1]
=(dp1[0]
+(dp1[3]
<<1)
)%m;
//可以由移動一步得到
dp2[2]
=(dp1[0]
)%m;
//可以由移動一步得到
dp2[3]
=(dp1[1]
)%m;
dp1 = dp2;
step++;}
long result =0;
for(
int i=
0;isize()
;i++
)return result%m;
}int
main()
C語言重構 935 騎士撥號器
所有題目源 git位址 題目西洋棋中的騎士可以按下圖所示進行移動 這一次,我們將 騎士 放在 撥號盤的任意數字鍵 如上圖所示 上,接下來,騎士將會跳 n 1 步。每一步必須是從乙個數字鍵跳到另乙個數字鍵。每當它落在乙個鍵上 包括騎士的初始位置 都會呼出鍵所對應的數字,總共按下 n 位數字。你能用這種...
騎士撥號器 c 解題思路
騎士撥號器 c 解題思路 思路 每乙個號碼,是由上面一輪的某個或者某幾個號碼,通過跳 日 得到的。include include include using namespace std 騎士跳 日 long m 1e9 7 intknightdialer int n 儲存最終結果的vetor vec...
每日刷題 騎士撥號器
這一次,我們將 騎士 放在 撥號盤的任意數字鍵 如上圖所示 上,接下來,騎士將會跳 n 1 步。每一步必須是從乙個數字鍵跳到另乙個數字鍵。每當它落在乙個鍵上 包括騎士的初始位置 都會呼出鍵所對應的數字,總共按下 n 位數字。你能用這種方式呼出多少個不同的號碼?因為答案可能很大,所以輸出答案模 10 ...