藍橋杯 ALGO 3 K好數

2021-08-20 02:17:05 字數 1131 閱讀 5010

演算法訓練 k好數  

時間限制:1.0s   記憶體限制:256.0mb

問題描述

如果乙個自然數n的k進製表示中任意的相鄰的兩位都不是相鄰的數字,那麼我們就說這個數是k好數。求l位k進製數中k好數的數目。例如k = 4,l = 2的時候,所有k好數為11、13、20、22、30、31、33 共7個。由於這個數目很大,請你輸出它對1000000007取模後的值。

輸入格式

輸入包含兩個正整數,k和l。

輸出格式

輸出乙個整數,表示答案對1000000007取模後的值。

樣例輸入

4 2樣例輸出 7

資料規模與約定

對於30%的資料,kl

<= 106;

對於50%的資料,k <= 16, l <= 10;

對於100%的資料,1 <= k,l <= 100。

分析:題目可能看上去有點嚇人。實際上的大致題意是:指定數的數字與最大的數字,找出一共有多少相鄰兩位沒有相鄰數字的排列方式。因為計算的數量級很大,所以暴力法肯定不行。這裡用dp。

具體思路如下:01

2311(0)

1(1)

1(2)

1(3)20

2(11,13)

2(20,22)

3(30,31,33)30

5(111,113,130,131,133)

…………

列出這樣的一張表。表的行代表數的位數,表的列數代表以某數字開頭的數的排列,表的每一格代表有多少滿足要求的數。如(2, 2)代表當長度為2時,滿足要求的以2開頭的數有兩個;(3, 1)代表當長度為3時, 滿足要求的數有5個。

設第i行第j列每一格內容為dp[i][j],當前判斷數字為n,可得遞推公式:

if(abs(n - j) != 1);

long long l, k;

cin >> k >> l;

for(int i = 0; i < k; i++)

for(int i = 2; i <= l; i++)

}} }

long long ans = 0;

for(int i = 1; i < k; i++)

cout << ans << endl;

return 0;

}

藍橋杯 ALGO 3 K好數

問題描述 如果乙個自然數n的k進製表示中任意的相鄰的兩位都不是相鄰的數字,那麼我們就說這個數是k好數。求l位k進製數中k好數的數目。例如k 4,l 2的時候,所有k好數為11 13 20 22 30 31 33 共7個。由於這個數目很大,請你輸出它對1000000007取模後的值 輸入格式 輸入包含...

藍橋杯ALGO 3 K好數(dp)

問題描述 如果乙個自然數n的k進製表示中任意的相鄰的兩位都不是相鄰的數字,那麼我們就說這個數是k好數。求l位k進製數中k好數的數目。例如k 4,l 2的時候,所有k好數為11 13 20 22 30 31 33 共7個。由於這個數目很大,請你輸出它對1000000007取模後的值。輸入格式 輸入包含...

藍橋 ALGO 3 K好數

問題描述 如果乙個自然數n的k進製表示中任意的相鄰的兩位都不是相鄰的數字,那麼我們就說這個數是k好數。求l位k進製數中k好數的數目。例如k 4,l 2的時候,所有k好數為11 13 20 22 30 31 33 共7個。由於這個數目很大,請你輸出它對1000000007取模後的值。輸入格式 輸入包含...