藍橋杯 演算法訓練 ALGO 3 K好數

2021-06-21 13:25:18 字數 875 閱讀 2314

思路:l位k進製,都是100 的數量級, 暴力肯定直接pass, 規律,尋不到(尋得到的 都是大神). 認真分析,對於每一位數, 如果不是最高位,那麼都可以用0到k-1這k個數來填充這一位,對於填充的每一位,我們假定已經知道如果這一位填充它的話,那麼好數會有f[i][j] 個(i表示第i位,j表示填的數),那麼 我們將0-k-1這k個數的f[i][j]的值 全部相加起來最後得到的肯定是我們所要的答案(對於最高位為0,我們會另行判斷,這裡是假設),於是這裡滿足了dp的最優化原理,而對於第i位的數字,它的求值是無後效性的,因為結果只是相加,所以dp的無後效性也滿足了,那麼就可以用dp來做。

然後現在就是狀態轉移方程,f[i][j] = ∑f[i-1][r] (r != j±1 ,0<=r < k, i > 1)初始化f[1][j] = 1 (0<= j < k);

狀態方程對最高位要特殊處理,因為最高位不能為0.

**:

#include #include #include using namespace std;

const int max_ = 101;

const int m = 1000000007;

int f[max_][max_];

int main()

memset(f,0,sizeof(f));

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

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

f[i][j] = cnt;}}

int sum = 0;

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

sum = (sum + cnt)%m;

}cout<< sum <}

return 0;

}

藍橋杯 ALGO 3 K好數

演算法訓練 k好數 時間限制 1.0s 記憶體限制 256.0mb 問題描述 如果乙個自然數n的k進製表示中任意的相鄰的兩位都不是相鄰的數字,那麼我們就說這個數是k好數。求l位k進製數中k好數的數目。例如k 4,l 2的時候,所有k好數為11 13 20 22 30 31 33 共7個。由於這個數目...

藍橋杯 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取模後的值。輸入格式 輸入包含...