Code[VS] 1984 K好数

来源:互联网 发布:电脑控制手机源码 编辑:程序博客网 时间:2024/06/11 17:33

【题意】

如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数。

例如K = 4,L = 2的时候,所有K好数为11、13、20、22、30、31、33 共7个。给定K、L,求L位K好数的数目。

【分析】
按位DP,设f[i][j]表示i位,第i位为j的方法数,则f[i][j]=sum{f[i-1][k]}|abs(j-k)<>1
边界f[0][0]=0,答案res=sum{f[l][j]}|1<=j<=k

【代码】

#include <cstdio>#include <cstring>#include <cstdlib>#include <cmath>using namespace std;int k,l;long long f[20][20],res;int main(void){scanf("%d%d",&k,&l);for (int p=0;p<k;p++) f[1][p]=1;for (int i=2;i<=l;i++)for (int p=0;p<k;p++)for (int q=0;q<k;q++)if (abs(p-q)^1) f[i][p]+=f[i-1][q];for (int p=1;p<k;p++) res+=f[l][p];printf("%lld\n",res);return 0;}


【小结】数位处理思想,从细节分析

0 0
原创粉丝点击