题目描述
有一种奇怪的大家族,这种家族里的人要么没有孩子,要么就有两个孩子。
已知某个这种家族共有N个人,家族中共有K代人。
你能告诉我这样的一个家族可能的家谱结构的种数除以9901的余数是多少吗?
输入包括一行,包括两个被空格分开的整数,第一个为家族中的人数N(3≤N≤200),
第二个为家族中的代数K(1 < K < 100)。
输出仅一行,包含一个整数,表示这样的一个家族可能的家谱结构的种数除以9901的余数。
样例输入
5 3
样例输出
2
AC代码
import java.util.Scanner;
public class Main {
private static int dp[][] = new int[210][110];
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int k = sc.nextInt();
System.out.println(means(n, k));
}
public static int means(int n, int k) {// n代表结点的个数,k代表树的层数
// int dp[][]=new int[210][110];
int i, j, m;
for (j = 1; j <= k; j++) {
// System.out.println("initial");
dp[1][j] = 1;// 设置边界值的大小
}
// dp[1][2]=3;
for (j = 2; j <= k; j++)// 层数
for (i = 3; i <= n; i++)// 结点数目
for (m = 1; m <= i - 2; m += 2)
dp[i][j] = (dp[i][j] + dp[m][j - 1] * dp[i - 1 - m][j - 1]) % 9901;// 递归求解
return (dp[n][k] - dp[n][k - 1] + 9901) % 9901;
// return dp[n][k];
}
}