camp day3

D題。題意:給出n個數的序列,n~2000,每一個數都有一個權值,w,wi + wj 》d的話,i和j有一條邊。 題目中會給出d的值~1e9. 問將這些分紅兩個集合,使得這兩個集合之間的邊最多,問最多的條數,和最多條數時候的方案數。
題解:咱們先只算最多的條數。關鍵是理解d的限制建造出的邊的使用方法。咱們看 ,將w升序排序,那麼前面的會有一些和n點沒有建邊的,能夠丟掉,而後有一些只和n建邊的,以後重點來了,咱們縮小規模,n點最後考慮,而後只考慮j1到n-1的子問題,而後將n點放到分好的兩個集合中的一個,以後把j到j1的放到和n點放的不一樣的集合裏面。因此咱們dp的時候還要多記錄一個集合中的個數爲x,也就是f【i】【x】,而後轉移的時候有O(1)的轉移。 考慮方案數的時候就是合併的時候多注意下就好。
E題。題意:給出一顆特別的樹,就是隻有根有不少個兒子,而以後都最多隻有一個兒子,就是一條一條的鏈,n~10000. 如今給出n個東西,每一個東西有一個限制,u到v的簡單路徑,要選取這個路徑上一個點,而且每一個點只可以分配給一個東西。求隨便一種分配方案。
題解:解法一:咱們觀察樹的特徵,發現有兩種鏈,一種是不跨過根的,一種是跨過根的,咱們先考慮一個貪心問題:一條鏈上,也就是一維的時候能夠用一個優先隊列來搞。 以後,咱們回到這一道題,咱們從鏈的葉子開始貪心,先不考慮全部跨過根的鏈,由於他們在咱們的貪心中老是最後才被考慮的,咱們如今貪心是對最終是對的。 那麼最後只剩下一些跨過根的鏈。 咱們就用上了他們的lca都是一個點的條件了,創建網絡流,每一個鏈從葉子往上依次連INF有向邊,匯聚到lca,而lca也到T連爲1的,就是考慮好限制和轉移匹配的INF的邊。 而後跑就好了。
解法二:一種經典的作法,倍增,每一個點有(i, j)表明i點往上到2^j個的區間,那麼咱們每一條鏈最多用4個就能覆蓋,建圖的邊重(i,j)向(i,j-1)和(i+啥啥啥, j-1)。最後會只剩一個點來連向T。也能夠用樹鏈剖分對應到線段樹上鍊。
F題。題意:n~400,表明n的排列,定義若是px 》 px+1,那麼貢獻一個x,將全部的貢獻值加起來,就是這個排列的值,如今給出一個k~n方級別的,求知足這樣方案數的個數。
題解:首先f【i】【k】,i指到i個數了,k指目前的答案是k,而後如今已經n三次方了,只能o(1)的轉換。咱們發現不會。。。。因此賽場上有人打表發現了規律,是一種作法。 後來說題的時候,說k等價於逆序對數,那麼咱們假設認爲這個正確,咱們推一下遞推式,把f【i】【k】,用i放在哪裏的方法,寫出來一個sigma的式,比較f【i】【k-1】,補一補就行了。 仍是很好的一道題的。
J題。題意:給出n,讓你用n個本身定隨便每一個邊長的正方形拼成一個大的正方形。n~100。
題解:咱們發現,n = 4,的東西,再加2也是能夠的。 因此偶數都行,除了2. 咱們又發現,一個正方形加3也是能夠的,就是和4同樣, 所以只有5不行,也就是2 3 5 不行, 1 特判 其餘的都能弄。web

本文分享 CSDN - ruclion。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。網絡

相關文章
相關標籤/搜索