dp上樹。
儲存:邊表(鄰接表,鏈式前向星)
(找節點i的子樹大小)
狀態設計:每個節點為狀態;初始化:葉子節點為1;轉移:把兒子們加起來。
順序:從葉子節點不斷向上做到根的過程。
void dfs(int now ,int fa)
}}
規定一棵樹,輸的詩經就是在樹上找到兩個點,使其距離最長,距離即直徑。
思考可得:距離 = \(p_1 => lca(p_1,p_2) => p_2\)
列舉以每個點作為拐點的最長路徑,最後對每個拐點去max。要算以i向下的最長路,以i向下的次長路,分別用f,g。
初始化:f[i]、g[i] = 0
\[f[i] = max(f[j] + 1) \\
次大路就是把當前最大路的子節點去掉之後得到的答案。
\]求樹上路徑的總長度和
\[\sum_^n \sum_^n dis(i,j)
\]g[i]所有點到根節點的距離之和,f[i]表示答案。p1到i的路徑總和為:g[i] = (g[p1] + size[p1]) * (size[i] - size[p1])(size是子樹的大小)。
\[f[i] = \sum_ f[p_j] + (g[p_j] + size[p_j]) \times (size[i] - size[p_j])
\]或者:
\[ans = \sum_^n size[i] \times (n - size[i]) \times 2
\]選出更多的點,使得這些點互不相鄰。(沒有邊)
f[i][0/1]表示i這個點選/不選的方案數。
\[f[i][1] = \sum _f[pi][0] \\
f[i][0] = \sum_ max(f[p_j][0],f[p_j][1]) + 1
\]現在要在一棵樹上布置士兵,每個士兵在結點上,每個士兵可以守護其結點直接相連的全部邊,問最少需要布置多少個士兵。
f[i][0/1/2],對於節點i,0表示兒子保護,1表示自己保護,2表示父親保護。
初始化葉節點:f[i][0] = inf,f[i][1] = 1,f[i][2] = 0;
g[k][0/1]:i節點的前k個兒子是不是已經有乙個兒子放了士兵
\[g[k][0] = g[k-1][0] + f[p_k][0] \\
g[k][1] = min( \\ g[k-1][0] + f[p_k][1], \\ g[k-1][1] + f[p_k][0], \\ g[h-1][0] + f[p_k][1])\\
\\ \\
f[i][0] = \\
f[i][1] = \sum_ min(f[p_j][0],f[p_j][1],f[p_j][2]) + 1;\\
f[i][2] = \sum_ f[p_j][0]
\]依賴揹包問題
每個物品要選必須先選某個指定的物品問能夠獲得的最大價值(今明的預算方案)
把依賴關係用數連起來,f[i][j]表示i的子樹用了j的體積。
初始化:f[i][0] = 0,f[i][vi] = wi,f[i][j] = -inf
轉移:g[i][j]前i個兒子用掉了前j的體積,則g[0][0],g[0][j] = -inf,g[i][j] = max(g[i-1][j-k] + f[pi][k])就是前i個兒子用掉j個體積的最大價值。(逐漸跑題)
轉移:f[i][0] = 0;f[i][j] = g[r][j-vi] + wi;
複雜度\(n * m^2\)
QBXT 二月五號整理
給你一列數 詢問和最大的子串 n 10 6 1 n 10 6 2 include3 include4 using namespace std 5int n,a 105200 6 intmaxsubstr 13 printf d n answer 14 15int main 16 啊!好巧妙,幸虧當時...
2020 3月份前端面試總結 計算機網路相關
1.跨域處理 1.後端設定cors 2.jsonp 3.也可以使用伺服器端 後端 將請求發給我方伺服器,我方伺服器去目標伺服器拿去資料,再將拿到的資料發回給前端頁面 2.jsonp實現原理 動態插入script標籤,通過script標籤引入乙個js檔案,這個js檔案載入成功後會執行我們在url引數中...
dp 小白月賽 迷霧森林
引言 迷霧森林 帕秋莉掌握了一種木屬性魔法 這種魔法可以生成一片森林 類似於迷陣 但一次實驗時,帕秋莉不小心將自己困入了森林 帕秋莉處於地圖的左下角,出口在地圖右上角,她只能夠向上或者向右行走 現在給你森林的地圖,保證可以到達出口,請問有多少種不同的方案 答案對2333取模 輸入描述 第一行兩個整數...