蓝桥杯-k好数

来源:互联网 发布:银行数据质量自查报告 编辑:程序博客网 时间:2024/04/29 18:56

 如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数。求L位K进制数中K好数的数目。例如K = 4,L = 2的时候,所有K好数为11、13、20、22、30、31、33 共7个。给定K、L,求L位K好数的数目。

[cpp] view plaincopyprint?
  1. #include<stdio.h>  
  2. __int64 f[20][20];  
  3. int main()  
  4. {  
  5.     int k,l,i,j,p;  
  6.     __int64 sum=0;  
  7.     scanf("%d%d",&k,&l);  
  8.   
  9.     for(i=0;i<=k-1;i++)  
  10.         f[1][i]=1;  
  11.   
  12.     for(i=2;i<=l;i++)  
  13.     {  
  14.         for(j=0;j<=k-1;j++)  
  15.         {  
  16.             for(p=0;p<=k-1;p++)  
  17.   
  18.                 if(p!=j-1&&p!=j+1)  
  19.   
  20.                 f[i][j]+=f[i-1][p];  
  21.               
  22.         }  
  23.     }  
  24.   
  25.   
  26.     for(i=1;i<=k-1;i++)  
  27.         sum+=f[l][i];  
  28.     printf("%I64d",sum);      
  29.     return 0;  
  30. }  

动态规划求解。f[i][j]   i表示数的长度,j表示末尾位的取值。


0 0
原创粉丝点击