蓝桥杯 K-进制数

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xcd1997/article/details/79707259

时间限制: 1Sec 内存限制: 128MB 提交: 152 解决: 46

题目描述

考虑包含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

dp 因为0不能连续,所以直接把dp[i][0]认为是i位末位为0的种数dp[i][1]认为末位不为0的情况,则dp[i+1][0]=dp[i][1];

dp[i+1][1]=(dp[i][0]+dp[i][1])*(k-1);


#include<iostream>
#include<string>
#include<stdio.h>
#include<algorithm>
using namespace std;
int main()
{
    int n,k;
    cin>>n>>k;
    long long int dp[20][2];
    dp[0][0]=0;
    dp[0][1]=k-1;
    for(int i=1;i<n;i++)
    {
        dp[i][0]=dp[i-1][1];
        dp[i][1]=(dp[i-1][0]+dp[i-1][1])*(k-1);
    }
    printf("%lld\n",dp[n-1][0]+dp[n-1][1]);
    return 0;
}



扫描二维码关注公众号,回复: 3228072 查看本文章


猜你喜欢

转载自blog.csdn.net/xcd1997/article/details/79707259