nums[i][j] 存的是i位数的时候,首位数字是j的K好数的数目,i从1位开始的结果,去算2位时的结果,去算3位时的结果。。。最后得到l位的结果。K进制只是一个范围。
import java.util.Scanner;
public class _3K好数 {
public static void main(String[] args) {
long l,sum=0;
long[][] num = new long[500][500];
int k;
Scanner scanner = new Scanner(System.in);
k = scanner.nextInt();
l = scanner.nextInt();
//不管多少进制,1位数字的只有一个
for (int i = 0; i < num.length; i++) {
num[i][1] = 1;
}
for (int j = 2; j <= l; j++) {
for (int i = 0; i < k; i++) {
for (int p = 0; p < k; p++) {
if (Math.abs(p-i)!=1) {
num[i][j] += num[p][j-1];
num[i][j] = num[i][j]%1000000007;
}
}
}
}
for (int i = 1; i < k; i++) {
sum += num[i][(int) l];
sum %=1000000007;
}
System.out.println(sum);
}
}