题目描述
考虑包含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<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<cmath> #include<sstream> #include<cstdlib> #include<map> using namespace std; typedef long long ll; double l,r; bool ck(int n,int k) { string ans=""; char pre=' '; do { int t=n%k; if(t>=0&&t<=9) { if(t==0&&pre=='0') return false; ans+=t+'0'; pre=t+'0'; } else ans+=t-10+'a'; n/=k; } while(n!=0); } int a[20]; int tot=0; int n,k; void DFS(int p) { if(p==n) { tot++; return ; } for(int i=0;i<k;i++) { if(i==0&&p==0) continue; if(a[p-1]==0&&i==0) continue; a[p]=i; DFS(p+1); } } int main() { cin>>n>>k; for(int i=0;i<20;i++) a[i]=0; tot=0; DFS(0); cout<<tot<<endl; return 0; }
思路
这个题意.... 我理解错了
N位数字表示的数就是k进制数 而不是十进制数.
所以。。直接DFS搜吧。