K好数(不取模)
题目
如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数。求L位K进制数中K好数的数目。例如K = 4,L = 2的时候,所有K好数为11、13、20、22、30、31、33 共7个。给定K、L,求L位K好数的数目。
输入格式
从文件读入数据,第一行为K、L,其中K<=16,L<=10。
输出格式
将结果输出到 KGOOD.OUT
示例输入
4 2
示例输出
7
//这题主要是动态规划
#include<cstdio>
#include<string>
#include<cstring>
#include<cmath>
#include<iostream>
using namespace std;
long long k,l,g=0;//int不太够,用long long
int main(){
long long c,a[101][101];
scanf("%lld%lld",&k,&l);
memset(a,0,sizeof(a));//初始化数组,以防万一
for(int i=0;i<k;i++)
a[1][i]=1;
for(int i=2;i<=l;i++){
for(int j=0;j<k;j++){
for(int n=0;n<k;n++)
if(abs(n-j)!=1)
a[i][j]+=a[i-1][n];
}
}
for(int i=1;i<=k;i++)
g+=a[l][i] ;
cout<<g;
return 0;
}