版权声明:本文为博主原创文章,未经博主允许不得转载。 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 查看本文章