洛谷 P1273 有線電視網(樹形dp,區間dp)

2022-02-13 11:45:45 字數 933 閱讀 8284

自己一開始做的時候知道是dp,但是設計的狀態總是有後效性的(看來還是做題少了),看完題解才恍然大悟。

設dp[u][i][j]表示以u為根的子樹,選取前i個兒子,使用者數為j的最大利潤,用類似區間dp的性質,dp[u][i][j]可以從dp[u][i-1][j-k]+dp[v][size[v]][k]-e[cnt].value轉移過來。

看一下資料範圍和狀態轉移方程,可以發現i這一維可以用滾動陣列優化,這樣空間就過了。

注意點:讀入w[i]時 迴圈變數i從1~m,對應的是w[n-m+i]。

1 #include2 #include3 #include4

using

namespace

std;

5const

int maxn=3005;6

int n,m,p[maxn],dp[2

][maxn][maxn],kk[maxn],cnt,w[maxn];

7struct

nodee[maxn];

10void insert(int u,int v,int

value)

17int dfs(int

u)23

int sum=0,t=0;24

for(int i=p[u];i!=-1;i=e[i].next)32}

33 sum+=kk;

34 t=t^1;35

}36return

sum;37}

38int

main()49}

50for(int i=1;i<=m;i++) scanf("

%d",&w[n-m+i]);

51 dfs(1

);52

for(int i=m;i>=0;i--)57}

58return0;

59 }

有線電視網 洛谷p1273

某收費有線電視網計畫轉播一場重要的足球比賽。他們的轉播網和使用者終端構成一棵樹狀結構,這棵樹的根結點位於足球比賽的現場,樹葉為各個使用者終端,其他中轉站為該樹的內部節點。從轉播站到轉播站以及從轉播站到所有使用者終端的訊號傳輸費用都是已知的,一場轉播的總費用等於傳輸訊號的費用總和。現在每個使用者都準備...

有線電視網 洛谷 P1273

只能想到n 3的辦法 一看資料量自閉了。看了題解也是n 3 智障出題人 dp i j 代表以i為根的子樹選j個使用者時得到的最大收益 然後就是樹上揹包轉移一下 最後看根節點上最多選幾個人不虧本 include include include using namespace std const int...

有線電視網 洛谷P1273

題目描述 某收費有線電視網計畫轉播一場重要的足球比賽。他們的轉播網和使用者終端構成一棵樹狀結構,這棵樹的根結點位於足球比賽的現場,樹葉為各個使用者終端,其他中轉站為該樹的內部節點。從轉播站到轉播站以及從轉播站到所有使用者終端的訊號傳輸費用都是已知的,一場轉播的總費用等於傳輸訊號的費用總和。現在每個使...