藍橋杯:K好數
阿新 • • 發佈:2019-02-16
題目:
如果一個自然數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。
分析:
動態規劃
程式碼:
#include<iostream> using namespace std; int MAX=1000000007; int a[100][100]; int main() { int k,l; cin>>k>>l; for(int i=0;i<k;i++) { a[1][i]=1; } for(int i=2;i<=l;i++) { for(int j=0;j<k;j++) { int cnt=0; for(int z=0;z<k;z++) { if(z==j-1 || z==j+1) continue; else { cnt=(cnt+a[i-1][z])%MAX; } } a[i][j]=cnt; } } int sum=0; for(int j=1;j<k;j++) { int cnt=0; for(int z=0;z<k;z++) { if(z==j-1 || z==j+1) continue; else { cnt=(cnt+a[l-1][z])%MAX; } } sum=(sum+cnt)%MAX; } cout<<sum<<endl; return 0; }