經過昨天一晚上的冥思苦想以及 對四邊形不等式的研究,我終於將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=
ijs
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...