動態規劃之K好數

2021-09-11 22:17:59 字數 1088 閱讀 5756

參考部落格:

如果乙個自然數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。

首先想到的是列舉法,測試規模100,直接**,bong?

然後考慮動態規劃的演算法。把位數為0和1的寫在**裡,如下:

觀察上表,發現規律:在每乙個進製下,都是加上對應上一行中的不相鄰的數的個數,不妨多寫幾行。

意思就是下一行的資料需要根據上一行來求得。將1位的時候的**初始化為1,後面的就好做了。

#include 

#include

.h>

using namespace std;

#define mod 1000000007

/*動態規劃的思想:動態陣列的行表示進製,列表示位數

* dp[length][system]

* l\k 0 1 2 3 sum

* 1 0 1 2 3 4

* 2 00,02,03 11,13 20,22 30,31,33 10

* */

int main()

}}} long long ans =0;

for(i =

1;i) cout<

return0;

}

動態規劃之K好數

動態規劃是將待求解的問題分解為若干個子問題 階段 按順序求解子階段,前一子問題的解,為後一子問題的求解提供了有用的資訊。如果乙個自然數n的k進製表示中任意的相鄰的兩位都不是相鄰的數字,那麼我們就說這個數是k好數。求l位k進製數中k好數的數目。例如k 4,l 2的時候,所有k好數為11 13 20 2...

K好數(動態規劃)

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

k好數 noip 動態規劃

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