演算法訓練 K好數 藍橋杯

2021-06-29 15:30:54 字數 1232 閱讀 5981

演算法訓練 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,取模跪了,吸取一下教訓,我是從高位往低位dp的,從左往右依次是第1,2,3.....位,dp[i][j]

是第i位為數字j的可能,於是dp[i][j]等於前乙個長度的所有可能除了與其相鄰的就可以了。這題可以再加乙個循

環來算前一位的和,我直接在前一位就把這個和算好了,再減去相鄰的,本來想降低複雜度的,沒想到給自己挖了

個坑,由於出現了減法,所以取模要把誤差加上o(╯□╰)o

**:

#include #include #include #include using namespace std;

const int maxn=150;

const int mod=1000000007;

int dp[maxn][maxn];

int main()

{ int k,l;

while(~scanf("%d%d",&k,&l))

{ memset(dp,0,sizeof(dp));

int sum1,sum2;

sum1=k-1;

for(int j=1;j

藍橋杯 演算法訓練 K好數

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

藍橋杯演算法訓練 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...