動態規劃之K好數

2021-09-29 19:24:36 字數 883 閱讀 6302

動態規劃是將待求解的問題分解為若干個子問題(階段),按順序求解子階段,前一子問題的解,為後一子問題的求解提供了有用的資訊。

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

輸入格式:輸入包含兩個正整數,k和l。

輸入樣例:4 2

輸出樣例:7

資料規模與約定:對於30%的資料,kl <= 106;對於50%的資料,k <= 16, l <= 10;對於100%的資料,1 <= k,l <= 100。

問題要求解的是l位k進製數中k好數的個數,按照動態規劃分析,將該問題拆解為若干個相似的子問題,只需要求解其中的第乙個子問題,再通過迭代的方式就可以求解出整個問題的解。

關鍵步驟:

l位k進製中k好數的個數劃分為i位首數字為j的k好數的個數,其中i取值[1,l],j取值[0,k],將整個問題分為l*(k+1)個子問題。建立乙個二維陣列f[i][j]表示i位首數字為j的k好數的個數,每個f[i][j]的值只和f[i-1]的值有關。

這裡因為已經知道迴圈的確切的次數,所有直接用巢狀的for迴圈就可以實現

#includeusing namespace std;

long long f[101][101]=; //f[i][j]表示長度為i,首數字為j的k好數的個數

int main()}}

} }

for(int i=1;i1000000007)

} cout

}

動態規劃之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好數 noip 動態規劃

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