19 10 30模擬測試T2二叉搜尋樹(區間DP)

2021-09-29 05:13:53 字數 1383 閱讀 3787

經過昨天一晚上的冥思苦想以及 對四邊形不等式的研究,我終於將t2的正解打了出來。

先看題:

就是保證一棵樹的中序遍歷不變,讓你構造一棵樹,滿足題意。

這道題可以用區間dp,令fi,

jf_fi,j

​表示只考慮節點[ i , j ]的答案。

在[i,j]區間中列舉決策點(根節點)k,則有fi,

j=mi

n(fi

,k−1

,fk+

1,j)

+∑x=

ijsu

m[x]

f_=min(f_,f_)+\sum_^jsum[x]

fi,j​=

min(

fi,k

−1​,

fk+1

,j​)

+∑x=

ij​s

um[x

],其中sum[x]為節點[ i , j ]的權值之和,可以用預處理的 j 的字首和減去 i 的字首和得到。

這是o(n2

^22)的做法,可以得40分。

接下來我們就要用到四邊形不等式優化(詳情可在《演算法競賽高階指南》上查詢)

可以證明fi,

jf_fi,j

​滿足四邊形不等式,則有k單調,所以我們只需在[ i ,j-1 ]與[ i+1 , j ]的決策點之間列舉即可。

下面貼**:

#include

using

namespace std;

#define in read()

int n,aa,p[

5005][

5005];

long

long f[

5005][

5005

],a[

5005];

int in

return i;

}int

main()

for(

int l=n;l>=

1;l--

)for

(int r=l;r<=n;r++

)long

long minn=

1e15

;for

(int i=p[l]

[r-1

];i<=p[l+1]

[r];i++

) f[l]

[r]+

=minn;

}printf

("%lld"

,f[1

][n]);

return0;

}

2014 9 6聯合模擬二 T4二叉樹

t4 二叉樹 在眾多的資料結構中,二叉樹是一種特殊而重要的結構,有著廣泛的應用。二叉樹或者是乙個節點,或者有且僅有乙個節點位二叉樹的根,其餘節點被分成兩個互不相交的子集,乙個作為左子集,另乙個作為右子集。每個子集又是乙個二叉樹。遍歷一棵二叉樹就是按某條搜尋路徑巡訪其中每個節點,使得每個節點均被訪問一...

洛谷8 24模擬賽T2 選數排列 二分 數論

給出 n nn 個數,我們需要選擇其中的 r c r cr c 個數,把它們填入乙個 r c r cr c 的矩陣 r rr 行 c cc 列 中。我們先定義乙個函式 d i d i d i 代表第 i ii行中最大的數和最小的數之差。對於整個矩陣,定義 f ff 為矩陣中 d i 1 i r d ...

樹 2 平衡二叉樹 T 110

題解1 與自己思路相似的一種解法 defisbalanced self,root treenode bool if not root return true left result self.isbalanced root.left right result self.isbalanced root...