出題 題解4

2021-07-16 20:40:00 字數 2220 閱讀 1824

由於3比較水略過

這個你只要對所有vi

按p取模,然後排個序,再列舉每個點,按照p−

vi在陣列上二分即可。有個坑就是二分到的可能是自己,造資料的時候特意卡了一下,不跳的就只有40分。

這個你只要考慮每條邊在答案裡的貢獻即可,列舉

v 子樹to

裡黑點的個數

w ,然後這條邊的貢獻就是(k

−w)∗

w∗va

l(v,

to),白點貢獻同理。

所以是乙個類似分組揹包的東西咯,看起來複雜度像是o(

n∗k2

) ,其實在dp的時候注意一點,在合併狀態的時候第乙個for只for到目前的sz

[v] (即to

左邊的子樹),即可保證複雜度是o(

n2)

關於證明:你可以把轉移時兩層for視為for兩個子樹裡的節點(for size和for 節點次數相同所以可以這麼考慮),那麼關於節點

u 和節點

v,只有在lc

a(u,

v)的地方才會被考慮到轉移,所以複雜度是o(

n2)

題解之前寫過,不過有些不詳細,但是有**,所以可以見這個傳送門 首先

n 那麼小除了暴力列舉相信你也不知道可以幹什麼。。

列舉得到那些訂單,那麼收益那一維可以丟掉了。

現在問題變成了如何在o(

n2)的複雜度裡check一些訂單是否成立。

先按時間排個序。

然後我們可以轉化一下問題,訂單

q 變成(t

q,aq

=∑qi

=1gi

)這樣問題可以簡化為對於每個訂單

q ,是否滿足在時間tq

時,有一種決策可以使得生產商品的總數到達aq

個。接下來我們用兩次貪心和乙個公式解決這個問題。

第乙個很顯然的貪心:在一段時間

t 裡,如果你要選擇

x天進行提高產率,那麼讓產率最大化的方案顯然是在

t 天裡前

x天進行提高產率,後面的時間進行生產。

想到這裡,並且看到我切分n=

1 的那部分,相信你已經想到如何解決這個問題了:可以用一元二次不等式解決這個問題。考慮n

=1的時候,選

x 天提高產率,剩下t−

x天進行生產,產量為(1

+x)∗

(t−x

) ,這裡的

1 是最初的產率,我們可以用

s帶掉他,那麼產量即為(s

+x)∗

(t−x

) 展開這個方程,你會發現它是開口向下的一元二次方程。結合check的時候,有乙個要求

a ,我們就得到了乙個一元二次不等式。直接用求根公式解掉它(大家數學都很好不用我說吧),別忘了判定

δ>=0

那麼n=1

的情況都解了,n≠

1 的情況自然輕鬆又愉快了,不就是聯立一些不等式嘛,小學生都會的事開玩笑嘿嘿嘿

現在你有很多的由一元二次不等式解出來的簡單不等式x∈

[li,

ri] ,你該如何選擇?或者說這些區間可能並不完全包含,區間

i 右端點會小於區間

j的左端點。

那麼我們可以這樣想,你並不是只在乙個區間裡提公升產率,相反的,你有

n 個區間可以提公升產率,如果當前的

x小於未來的某個li

,不要緊,以後還有時間彌補,但是如果

x 已經大於某個ri

了,那麼不用多說,已經廢了。。

所以第二個貪心水落石出了。我們每次按順序掃瞄一下這些區間,貪心地取x=

minnj=

iri ,從數學的角度說這個值無疑可以在滿足所有右端點的情況下滿足所取的值

x 最靠近(如果有的話)左端點大於

x,日後的決策可以更加輕鬆。意識流的看也沒用錯,當前產率很高,雖然總產量不咋地,但是在滿足掃瞄過的區間的情況下,日後的發展基礎更好了是不?(注意這個東西已經滿足了右端點的約束,所以已經滿足了前

i 個區間的成立以及後面的區間成立的可能性)

接下來的事情不用我說了,每次按如上決策砍掉乙個訂單(即在商品總量裡去掉gi

),然後進行相同操作。不知你有沒有注意到最開始我用

s 替換掉了最初的生產力

1,就是為這裡服務的,你只要把提高的產率加到

s 裡,後面的步驟可以說不變。(不過要注意後面所有的

a會相應地減少)

那麼,這道bzoj上不超過100人的題,解了。

學長出題 比賽題解 17 10 18

這次比賽由 falldream學長出題,歡迎去他的blog學習!t1 切課本 題意 小 z 厭惡數學,他決定將數學課本切成一塊一塊的。他的課本是乙個 n m 的矩形,小 z 決定切 k 刀,每刀他可以橫著切或者豎著切,但是切成的矩形的長和寬都必須是整數。當然,小 z 不會做出兩次相同的操作。例如 n...

自出題,寫題解《招募士兵》

招募士兵 conscription.pas c cpp 問題描述 小w擁有乙個國家,現在他希望建立一支軍隊來保護他的國家。他選中了n個女孩和m個男孩希望招募他們成為他的士兵。在沒有任何先決條件的情況下,他招募乙個士兵需要花費10000rmb。現在小w可以利用這些人之間的關係來減少他的花費。如果女孩x...

P1157 組合的輸出 題解

就是列印出有位數限制的全排列 按照字典序 個人用dfs遞迴做完 但是看了別人的stl做法,對next permutation有了更新的認識。當時想用stl,但是不知道怎麼實現,看了別人的就明白01陣列的妙處了 我的 include using namespace std int a 22 n,r v...