我们定义一个合法的K进制数为一个不含连续两个零的K进制数。
例如:
1010230 是一个合法的7位数。
1000198 不是合法的数。
0001234 不是7位数,是一个合法的4位数。
给你N,和K,求出N位的K进制数的总数。
2 <= K <= 10; N >= 2; 4 <= N+K <= 18。
/* DP,f[i]代表第i位置 可以表示成的数字的种类, f[i]:=(k-1)*(f[i-1]+f[i-2]) //f[0]:=1,f[1]:=k-1 */ #include<iostream> #include<cstdio> #include<cstring> #include<string> #include<algorithm> #include<vector> #include<cstdlib> #include<cmath> #include<queue> using namespace std; int n,k,dp[50]; int main() { while(scanf("%d%d",&n,&k)!=EOF) { k--; dp[0]=1; dp[1]=k; for(int i=2;i<=n;i++) dp[i]=k*(dp[i-1]+dp[i-2]); printf("%d\n",dp[n]); } return 0; }
时间: 2024-12-15 05:18:35