題目詳情
題目分析:解法是記憶化搜尋。
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...