2020 08 03日常總結

2021-10-08 19:31:09 字數 2158 閱讀 4199

二分是個神奇的演算法,它能讓你難以維護的資料突然變得十分容易維護……

[problem]

\color}

[problem]

[solution]

\color}

[solution]

是不是感覺總價值的那個式子特別難維護?

我們可以記 mid

\texttt

mid 表示總價值大於等於 mid

\texttt

mid。我們發現 mid

\texttt

mid 越大,越難以滿足,所以我們可以二分答案。

改寫乙個總價值那個式子:

∑ i∈

tpi∑

i∈ts

i≥

mid∑i∈

tpi≥

mid×∑i

∈tsi

∑i∈t

pi

−mid×∑

i∈ts

i≥0∑

i∈t(

pi

−mid×s

i)≥0

\begin \dfrac p_i}s_i} &\geq \texttt\\ \sum\limits_ p_i &\geq \texttt \times \sum \limits_s_i\\ \sum\limits_ p_i - \texttt \times \sum \limits_ s_i & \geq 0\\ \sum\limits_ \left (p_i - \texttt \times s_i \right ) & \geq 0 \end

i∈t∑​s

i​i∈

t∑​p

i​​i

∈t∑​

pi​i

∈t∑​

pi​−

mid×i∈

t∑​s

i​i∈

t∑​(

pi​−

mid×si

​)​≥

mid≥

mid×i∈

t∑​s

i​≥0

≥0​改每個點的價值為 pi−

mid×si

p_i -\texttt \times s_i

pi​−

mid×si

​,原題被轉化為了乙個樹上 dp 的問題。只要最後的總價值 ≥

0\geq 0

≥0,代表 mid

\texttt

mid 是乙個可行答案。

如何樹上 dp?很簡單,記 fi,

jf_

fi,j

​ 表示在 i

ii 的子樹中選 j

jj 個點時的最大總價值,原題被轉化為了乙個樹上揹包問題,可以用類似選課一題的方法解決。

[code]

\color}

[code]

struct edgee[

2510];

int h[

2510

],tot;

inline

void

add(

int a,

int b)

;h[a]

=tot;

}double p[

2510

],s[

2510

],w[

2510];

double f[

2510][

2510];

//dp用陣列

int n,t,sze[

2510];

double l,r,mid;

inline

voiddp(

int u)

}const

int inf=

0x3f3f3f3f

;inline

bool

check

(double mid)

const

double eps=

1e-4

;int

main()

l=0.0

;r=10000.0

;while

(l+epsprintf

("%.3lf"

,l);

return0;

}

2019 08 18 日常總結

一本通1599 題意 在一年前贏得了小鎮的最佳草坪比賽後,fj 變得很懶,再也沒有修剪過草坪。現在,新一輪的最佳草坪比賽又開始了,fj 希望能夠再次奪冠。然而,fj 的草坪非常髒亂,因此,fj 只能夠讓他的奶牛來完成這項工作。fj 有 nn 只排成一排的奶牛,編號為 11 到 nn。每只奶牛的效率是...

5059日常總結

1.乙個函式的形參是const char 實參是可以是char 如果乙個函式的返回值是const char 不能用char 來接收返回值 2.為什麼沒有靜態的建構函式和析構函式?建構函式成員函式使用現有分配構造指定的物件 即存在this。static成員函式指定物件沒有儲存,因此沒有關聯的例項要構造...

2019 10 01日常總結

前言 今天是祖國母親70歲生日,請允許我向祖國母親說一聲 生日快樂!願您永遠繁榮昌盛 山清水秀!題意 松鼠的新家是一棵樹,前幾天剛剛裝修了新家,新家有n nn個房間,並且有n 1 n 1n 1根樹枝連線,每個房間都可以相互到達,且倆個房間之間的路線都是唯一的。天哪,他居然真的住在 樹 上。松鼠想邀請...