參考部落格:
如果乙個自然數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取模後的值。輸入格式 ...