【計蒜客系列】挑戰難題29:奇異家庭
阿新 • • 發佈:2019-01-27
有一種奇怪的大家族,這種家族裡的人要麼沒有孩子,要麼就有兩個孩子。已知某個這種家族共有N個人,家族中共有K代人。你能告訴我這樣的一個家族可能的家譜結構的種數除以9901的餘數是多少嗎?
輸入包括一行,包括兩個被空格分開的整數,第一個為家族中的人數N(3≤N≤200),第二個為家族中的代數K(1 < K < 100)。
輸出僅一行,包含一個整數,表示這樣的一個家族可能的家譜結構的種數除以9901的餘數。
樣例1
輸入:
5 3
輸出:
2
參考資料:
#include <iostream> #include <cstring> #define N 201 #define MOD 9901 using namespace std; int dp[N][N], n, k; // int main() { cin>>n>>k; memset(dp, 0, sizeof(dp)); for (int i = 1; i <= k; i++) { dp[1][i] = 1; } for (int i = 2; i <= k; i++) { for (int j = 3; j <= n; j += 2) { for (int p = 1; p <= j - 2; p += 2) { dp[j][i] = (dp[j][i] + dp[p][i - 1] * dp[j - p - 1][i - 1]) % MOD; } } } cout<<(dp[n][k] - dp[n][k - 1] + MOD) % MOD<<endl; }