Acwing 479 加分二叉樹(區間dp)

2021-10-18 18:52:23 字數 854 閱讀 7886

495/老師用了區間dp;

dp[l]

[r]是左邊界l,右邊界r的最大加分

同時還需要設乙個k表示根節點,然後dp[l]

[k-1

]表示左子樹最大加分,dp[k+1]

[r]表示有指數最大加分。然後遍歷這

一區間最大的加分就可,題目中要求輸出乙個前序的序列,那我們把每乙個最大區間也就是dp[l]

[k-1

]*dp[k+1]

[r]+w[k]

的根節點記下來就好了用g[l]

[r]來儲存.

最後說一下題意

對與乙個根節點

1.若只有乙個子樹,則根的加分為子樹的分值*

1+根的分數。

2.若是有兩個子樹,則根的加分為左子樹分值*右子樹分值+根的分數

3.若沒有子樹,則根的加分為根的分數本身。

最後說下**吧,也不是很長

#include

using

namespace std;

const

int n=35;

int w[n]

,dp[n]

[n],g[n]

[n];

void

print

(int l,

int r)

//輸出前序 根、左、右

intmain

(void

)else}}

} cout<[n]

,n);

}

AcWing 479 加分二叉樹(區間dp)

題目大意 構造一顆 n nn 個節點的二叉樹,其編號為 1,2 3,n 1,2,3,n 1,2,3,n 每個節點都有乙個權值 w iw i wi 子樹的權值 左子樹權值 右子樹權值 根節點權值 若某個子樹為空,規定其權值為 1 11。葉子的加分就是葉節點本身的分數,不考慮它的空子樹。試求一棵符合中序...

479 加分二叉樹

原題傳送門 設乙個n個節點的二叉樹tree的中序遍歷為 1,2,3,n 其中數字1,2,3,n為節點編號。每個節點都有乙個分數 均為正整數 記第i個節點的分數為di,tree及它的每個子樹都有乙個加分,任一棵子樹subtree 也包含tree本身 的加分計算方法如下 subtree的左子樹的加分 s...

加分二叉樹

描述 設乙個n個節點的二叉樹tree的中序遍歷為 l,2,3,n 其中數字1,2,3,n為節點編號。每個節點都有乙個分數 均為正整數 記第i個節點的分數為di,tree及它的每個子樹都有乙個加分,任一棵子樹subtree 也包含tree本身 的加分計算方法如下 subtree的左子樹的加分 subt...