luogu P1040 加分二叉樹

2021-10-04 13:13:13 字數 690 閱讀 6965

題目詳情

題目分析:解法是記憶化搜尋。

val[i][j]存的是i到j區間內的最高加分。

tree[33] 據題意可得,tree陣列存的是樹的中序遍歷順序。

root[i][j]存的是tree陣列從i到j的最優根,即以此為根保證此子樹最高加分。

通過中序遍歷性質可知:若x為根節點,1~x - 1為左子樹,x + 1 ~n為右子樹。

**:

#include

unsigned

int n, val[33]

[33], tree[33]

, root[33]

[33];

//資料範圍小於4,000,000,000

unsigned

intdfs

(int l,

int r)

if(val[l]

[r])

return val[l]

[r];

//記憶化,若搜尋過直接返回

for(

int i = l; i <= r; i++

)return val[l]

[r];

//返回最高加分。

}void

preorder

(int l,

int r)

intmain()

luogu P1040 加分二叉樹

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

luogu P1040 加分二叉樹 題解

今天考試考了乙個區間dp.沒錯就是這個.太蒟了真是連區間dp都不會.看了看題解也看不懂,於是請了某獴dalao給補充了一下。在這裡把自己的理解寫下來,算是給一些像我一樣不會區間dp的萌新們一點指引。所謂區間dp,顧名思義就是在一段區間上的動態規劃。它既要滿足dp問題的最優子結構和無後效性外,還應該符...

洛谷1040 加分二叉樹

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