1013: K-进制数
时间限制: 1 Sec 内存限制: 128 MB提交: 71 解决: 14
[ 提交][ 状态][ 讨论版]
题目描述
考虑包含N位数字的K-进制数. 定义一个数有效, 如果其K-进制表示不包含两连续的0.
考虑包含N位数字的K-进制数. 定义一个数有效, 如果其K-进制表示不包含两连续的0.
例:
1010230 是有效的7位数
1000198 无效
0001235 不是7位数, 而是4位数.
给定两个数N和K, 要求计算包含N位数字的有效K-进制数的总数.
假设2 <= K <= 10; 2 <= N; 4 <= N+K <= 18.
输入
两个十进制整数N和K
输出
十进制表示的结果
样例输入
2
10
样例输出
90
提示
来源
思路:略。
# include <stdio.h>
# include <string.h>
int dp[9][2], n, k;
int dfs(int pos, int pre)
{
if(pos == -1) return 1;
if(dp[pos][pre==0] != -1) return dp[pos][pre==0];
int ans=0;
int i=pos==n-1?1:0;
for(; i<=k-1; ++i)
{
if(pre==0 && i==0) continue;
ans += dfs(pos-1, i);
}
dp[pos][pre==0] = ans;
return ans;
}
int main()
{
while(~scanf("%d%d",&n,&k))
{
memset(dp, -1, sizeof(dp));
printf("%d\n",dfs(n-1,0));
}
return 0;
}