K好数

【题目描述】
如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数。求L位K进制数中K好数的数目。例如K = 4,L = 2的时候,所有K好数为11、13、20、22、30、31、33 共7个。由于这个数目很大,请你输出它对1000000007取模后的值。
【输入格式】
输入包含两个正整数,K和L。
【输出格式】
输出一个整数,表示答案对1000000007取模后的值。
【样例输入】
4 2
【样例输出】
7
【数据范围】
对于30%的数据,K^L <= 106;
对于50%的数据,K <= 16, L <= 10;
对于100%的数据,1 <= K,L <= 100。
【分析】
设f[i][j]表示有i位数字且首位数字为j的情况。

var
  f:array[1..10000,0..100]of qword;
  l,k,i,j,x:longint;
  s:qword;
begin
  read(k,l);
    fillchar(f,sizeof(f),0);
  for i:=1 to k-1 do f[1,i]:=1;
  for i:=2 to l do
    for j:=0 to k-1 do begin
      for x:=0 to k-1 do
              if abs(x-j)<>1 then f[i,j]:=f[i,j]+f[i-1,x];
            f[i,j]:=f[i,j] mod 1000000007;
        end;
  s:=0;
  for i:=0 to k-1 do inc(s,f[l,i]);
    write(s mod 1000000007);
end.
posted @ 2016-12-19 06:18  JRX2015U43  阅读(134)  评论(0编辑  收藏  举报