藍橋k好數

2021-06-30 16:19:44 字數 881 閱讀 6979

如題:

問題描述

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

思路:如果暴力,每一位範圍0-k,一共l位,就是o(l^k),最大100^100,肯定超。

觀察,相鄰的2位只要不大小不相鄰,於是從i-1位數一定可以推出i位數字的情況,

dp[i][j]表示i位數字且第一位是j的所有情況。

dp[i][j]=sum(dp[i-1][x])    (x∈[0,k))\   i∈[2,l]    j∈[0,k)

為什麼這個地方j可以等於0

現實中是不可能出現首位是0這種情況的,但是在遞推的過程中會用到.除了第一位其餘位可以為0

#include

#include

#include

using namespace std;

#define mod 1000000007

int k,l;

int dp[105][105];

int main()

}int sum=0;

for(i=1;icout<}

藍橋 K好數

給兩個數k和l,表示乙個l位的k進製數,定義k好數為 這個l位數的任意相鄰的兩位的兩個數都不能相鄰。換句話說就是他們的差的絕對值不能為1。求這樣的數一共有多少個 動態規劃問題,dp i j 表示第i位為j的情況下一共有多少個k好數。那麼很明顯dp i j sum dp i 1 m m範圍是0 k且m...

藍橋杯 K好數

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

k好數 (藍橋杯)

時間限制 1 sec 記憶體限制 128 mb 提交 22 解決 3 提交 狀態 討論版 題目描述 如果乙個自然數n的k進製表示中任意的相鄰的兩位都不是相鄰的數字,那麼我們就說這個數是k好數。求l位k進製數中k好數的數目。例如k 4,l 2的時候,所有k好數為11 13 20 22 30 31 33...