乙個n
nn個節點的二叉樹,每個節點都有乙個分數,每顆子樹也有分數
每顆子樹的分數計算方法為:
s ub
tree
的左子樹
的加分×
subt
rees
ubtr
ee的右
子樹的加
分+su
btre
esub
tree
的根的分
數。
subtree的左子樹的加分× subtreesubtree的右子樹的加分+subtreesubtree的根的分數。
subtre
e的左子
樹的加分
×sub
tree
subt
ree的
右子樹的
加分+s
ubtr
eesu
btre
e的根的
分數。若某個子樹為空,規定其加分為1,葉子的加分就是葉節點本身的分數。不考慮它的空子樹
試求一棵符合中序遍歷為(1,
2,3,
…,n)
(1,2,3,…,n)
(1,2,3
,…,n
)且加分最高的二叉樹tre
etree
tree
。要求輸出;
(1)tre
etree
tree
的最高加分
(2)tre
etree
tree
的前序遍歷
我們用dp[
m][i
][j]
dp[m][i][j]
dp[m][
i][j
]來表示一顆以m
mm為根,子樹為i−j
i-ji−
j的樹的最大得分,sum
[l][
r]
sum[l][r]
sum[l]
[r]來代表子樹節點是i−j
i-ji−
j的子樹的最大得分
那麼d p[
m][i
][j]
=max
(dp[
m][i
][j]
,(su
m[i]
[m−1
]∗su
m[m+
1][j
])∗a
[m])
,sum
[i][
j]=m
ax(d
p[m]
[i][
j],s
um[i
][j]
)dp[m][i][j]=max(dp[m][i][j],(sum[i][m-1]*sum[m+1][j]) * a[m]),sum[i][j]=max(dp[m][i][j],sum[i][j])
dp[m][
i][j
]=ma
x(dp
[m][
i][j
],(s
um[i
][m−
1]∗s
um[m
+1][
j])∗
a[m]
),su
m[i]
[j]=
max(
dp[m
][i]
[j],
sum[
i][j
]),這樣狀態轉移就寫完了, 後面就是遞迴輸出這棵樹了,每次找區間的最大值作為根節點,然後向左向右遞迴
void
first
(int l,
int r)}if
(l ==
1&& r == n)
printf
("%lld\n"
, max)
;printf
("%d "
, u);if
(u -
1>= l)
first
(l, u-1)
;if(u +
1<= r)
first
(u+1
, r)
;}
#include
using namespace std;
#define ll long long
const
int maxn =
1e5+5;
const
int inf =
0x3f3f3f3f
;const
int mod =
1e9+7;
const
double eps =
1e-8
;typedef pair<
int,
int> psi;
void
fre(
)ll dp[40]
[40][
40], a[40]
, sum[40]
[40];
int n;
void
first
(int l,
int r)}if
(l ==
1&& r == n)
printf
("%lld\n"
, max)
;printf
("%d "
, u);if
(u -
1>= l)
first
(l, u-1)
;if(u +
1<= r)
first
(u+1
, r);}
intmain
(int argc,
char
*args)
}}first(1
, n)
;return0;
}
洛谷 P1040 加分二叉樹
題目描述 設乙個n個節點的二叉樹tree的中序遍歷為 1,2,3,n 其中數字1,2,3,n為節點編號。每個節點都有乙個分數 均為正整數 記第i個節點的分數為di,tree及它的每個子樹都有乙個加分,任一棵子樹subtree 也包含tree本身 的加分計算方法如下 subtree的左子樹的加分 su...
洛谷 P1040 加分二叉樹
題目描述 設乙個n個節點的二叉樹tree的中序遍歷為 1,2,3,n 其中數字1,2,3,n為節點編號。每個節點都有乙個分數 均為正整數 記第i個節點的分數為di,tree及它的每個子樹都有乙個加分,任一棵子樹subtree 也包含tree本身 的加分計算方法如下 subtree的左子樹的加分 su...
洛谷P1040 加分二叉樹
設乙個 n 個節點的二叉樹tree的中序遍歷為 1,2,3,n 其中數字 1,2,3,n 為節點編號。每個節點都有乙個分數 均為正整數 記第 i 個節點的分數為 di,tree 及它的每個子樹都有乙個加分,任一棵子樹 subtree 也包含 tree 本身 的加分計算方法如下 subtree 的左子...