935 騎士撥號器 c 解題方法二

2021-10-07 06:55:33 字數 1042 閱讀 2793

思路:將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 ...