[トピック] DP - ロサンゼルスバレーP1273ケーブルネットワーク

木のDPボード。

ポータル:GO

 


 

  Jは、私はDP [I] [J]で最もお金(古典的なモデル)を獲得するサブツリーを選択し、観客を表します。

  次いで、DP [I] [J + K] = MAX(DP [息子[I] [K] + DP [I] [j]は-w、DP [I] [J + K])は、平均値、選択されたサブツリーのk個の観客ならば、答えは( - このセクションのコスト現在、Kのみの観客の場合には、状況のJ +選択されたサブツリーを選択しました)です。

  速報値、訪問者の量すべての選択は、現在のサブツリーは観客の量が含まれているので、観客の量に含まれるタイプのサブツリーを返すように設計されたDFSは、上部の列挙バインドを処理することができます:上限列挙が何を決定します。

  ノードuのため、Uプレフィックスが外層列挙上のすべてのサブツリー(必要な動的更新を)制限され、現在のサブツリーの内側サイズに制限されます。

  アカウントに伝達方程式の聴衆を取ると、観客は少なくよりから、それは余計な原因には影響しません、衝撃のあまりを持っているので、逆列挙します。

  コードの残りの部分を参照してください。

 

1つの#include <ビット/ STDC ++ H>
 2  使用して 名前空間STDを、
3  int型リード(){
 4      int型のx = 0、F = 1 5      チャー C = GETCHAR()。
6      ながら(!isdigit(c)参照){
 7          場合(C == ' - ')、F = - 1 8          C = GETCHAR()。
9      }
 10      ながら(isdigit(C)){
 11          、X = X * 10 + C- ' 0 ' 12          C = GETCHAR()。
13      }
 14      リターンのx *のF。
15  }
 16  のconst  int型 N = 3010 17  int型N、M、CNT。
18  int型ヘッド[N << 1 ]。
19  INT 月[N]、[N] [N] F。
20  構造体端{ INT次に、W;} E [N << 1 ]。
21  ボイド addedge(INT  からINTに、INT W){E [++ CNT] =(エッジ){に、[先頭から ]、W};頭[] = CNT;}
 22  INT DFS(INT U){
 23      であれば(U> N- M){
 24          F [U] [ 1 ] = 月[U]。
25          リターン 1 26      }
 27      のint UPZ = 0 28      のためにint型 I =ヘッド[U]; I; I = E [I] .next){
 29          のint V = E [i]の.TO、W = E [I] .W。
30          INTは今= DFS(V)。
31          のためにINT J = UPZあり、j> = 0 ; j-- ){
32              のためのint型のk = 0 ; K <=今++ kは{)
 33                  F [U] [J + K] = MAX(F [U] [J + K]、F [U] [J] + F [V ] [K] - W)。
34              }
 35          }
 36          UPZ + = 今。
37      }
 38      リターンUPZ。
39  }
 40  INT メイン(){
 41      N =読み取る(); M = 読み取ります()。
42      のためには、int型 I = 1、kは、iが<= NM; iは++ ){
 43          、K = リード()。
44          のためにINTの J = 1 ; J <= K; J ++ ){
 45              INTは、X =リード()、yは。= 読み取ります();
46              addedge(I、x、y)は、
47          }
 48      }
 49      のためのint型 I = N-M + 1 ; iが<= N; I ++)は月[I] = (読み取り)
50      のmemset(F、 - 0x3fをはsizeof (F))。
51      のためには、int型 i = 1 ; iがn = <; iは++)F [i]が[ 0 ] = 0 ;
52の      DFS(1 )。
53      のためのint型I = M、I> 0 ; i-- ){
 54          であれば([F 1 ] [I]> = 0 ){
 55              のprintf(" %dの" 、I)。
56              リターン 0 57          }
 58      }
 59      リターン 0 60 }

 

おすすめ

転載: www.cnblogs.com/Nelson992770019/p/11580785.html