|
一个k进制的数,每一位只可能是0到k-1,我们用dp[i]来表示第位数为i的k进制数的个数,显然dp[1]=k-1(0不能出现在首位,位数为2的个数应当是(k-1)*k;由于不能有两个连续的0,因此dp[i](i>2)=dp[i-1]*(k-1)+dp[i-2]*(k-1);
#include<iostream>
#include<algorithm>
using namespace std;
#define MAXN 10050
unsigned long long dp[MAXN];
int main()
{
int n,k;
cin>>n>>k;
dp[1]=k-1;
dp[2]=k*(k-1);
for(int i=3;i<=n;i++)
{
dp[i]=(k-1)*(dp[i-1]+dp[i-2]);
}
cout<<dp[n]<<endl;
return 0;
}