質問 1: 二分木の種類は何種類ありますか?
n を入力 (1<n<13)、n 個のノードを持つ二分木の形式が何個あるかを求めます。
制限時間: 1000
メモリ制限: 65536
入力
整数 n
出力解答
サンプル
入力
3
サンプル出力
5
この問題は、動的プログラミング手法を使用して解決できます。ノードが存在する場合、二分木の種類の数を表すdp
配列を定義できます。二分木の性質によれば、二分木の種の数は、その左部分木と右部分木の種に依存することがわかります。dp[i]
i
具体的な動的プログラミングの再帰関係は次のとおりです。
ノードのバイナリ ツリーの場合i
、ノードをルート ノードとして選択し、その左側のノードが左側のサブツリーを形成し、その右側のノードが右側のサブツリーを形成します。この分割によれば、次の関係が得られます。
dp[i] = dp[0] * dp[i-1] + dp[1] * dp[i-2] + ... + dp[i-1] * dp[0]
で、