[テンプレート]ツリーDP

1  空隙 DFS(INT X)
 2  {
 3      [DP [X] 。1 ] =のS [I]、サイズ[X] = 1 ;
 4      INT I =はじめ[X]; I; I = 次に[I])
 5      {
 6。         // はじめ[X]に、エッジに対応する[I]は、子ノードx 
7。         DFS([I]に)
 。8          のためのINT J; J = Cminの(M、サイズ[X])J - 9          // これは[I]、前のサイズである
10              のためのint型 = K 1、K <= Cminの(MJ、サイズ[I]乃至]); ++ K 11。             //kは現在のサブノードに番号を意味
12は、                  DP [X] [J + k]はのCmax(DP [X] [J + k]を=、DP [X] [J] + [K [I]に] DP ]);
 13である          サイズ[X] + = ] [Iの大きさ[];
 14      }
 15  }
 16  // サイズは、[X] iがルートノード点のサブツリーで表される、上記更新がアクティブである
17。 
18が 空隙 DFS (INT X)
 19  {
 20は      サイズ[X] = 1 ;
 21である     ためint型 Iは、まず、[X]を=; I; I = 次に[I])
 22である     {
 23は          DFS(の[I])、サイズ[X] + = サイズ[I] [する];
 24          INTJ =分(M、サイズ[X]); J; j-- 25              のためのINT K = 1 ; <=分(J、サイズ[[I]乃至] k)は、k個++ 26                  [X] DP [ J] = MAX(DP [X] [J]、DP [X] [JK] + [Iに[DP] [K])。
27      }
 28      のためのint型 ; I; I =分(M、サイズ[X])i--)DP [X] [I] = DP [X] [I- 1 ] + S [X]。// 保证父亲节点被选到
29 }

 

おすすめ

転載: www.cnblogs.com/xiaobuxie/p/11391909.html