B.題,題意:2000個點的不少邊的圖,求全部最短路ij的長度平方的和.
題解:平方的和,咱們沒什麼小技巧了. 只能求出來每一個ij的長度. 那麼咱們枚舉i爲起點,來更新全部的j,可是是邊的複雜度,太大了,咱們發現其實只要更新f[j],一次,bfs的時候先更新到的就能刪了,下次不用考慮.可是這道題重點是:用bitset來作,由於還有一個點連得邊和當前沒有更新的集合,取個&,而後關鍵是很快找到那些爲一的序號,本身手寫bitset以及對只有一個1的值放在數組裏而後二分就好
D.題,題意:一個圖,保證每一個點都可以被從每一個點開始所到達,如今給一個k>=3的限制,要求搞一個n的環,使得每一個點都不一樣而且點與點之間<=k的距離.
題解:k=3發現就可以所有搞定.建一棵樹,而後奇偶染色,咱們跳着走,先走偶數,而後偶數dfs完了以後回來走奇數的點,奇數點回到頭直接繼續偶數的(這就是k=3而不是k=2的緣由)
F.題,題意:給出一個d(<=16)維的向量,定義小於等於的意義是:每一維的數均小於等於每一維的數,而後給一個1e5的序列,讓求出整個序列可以的挑出來的不降的數量.
題解:若是是普通的小於,那就是一個簡單的數據結構,可是這個是很奇怪的要求,所以沒有現成的數據結構. 咱們考慮暴力,每次都弄出來一個高維前綴和,高維前綴和是(16*2^16)的複雜度,太大了.可是咱們可以用一個分塊的方法,建一個小的修改池,達到咱們的數量要求L的時候再從新拿起來暴力重構一個高維前綴和,再這L積累的之間咱們每次順序掃(1到L次)來求結果,最後列出來公式求L = sqrt(16*2^16)
G.題,題意:n(500)個數須要編碼建成哈夫曼樹,哈夫曼樹的每層i都有ri個不一樣字符個數的限制制 ,每一個單詞都有本身的權值,問最小權值分配.
題解:dp設fijk,表明i層,咱們還有j個空位子,已經到了k號單詞(排好序了),轉移的話,每次j-1個空位子,就是放一個,要麼就是都不放了,直接計算到下一層.關鍵是,哈夫曼樹的過程只用考慮這一層有幾個空位,由於以上的空位都填單詞或者建新樹了
H.題,題意:n~2000個數,每一個位置的數>=0 且 <=ai, ai~1e9,要求全部的序列xi <= xj, 問一共有多少種方法.
題解:咱們極可能設f[i][j],表明到i個數,第j層i,轉移的話很差弄,能夠用金爺的反着定而後fft的小技巧. 還有一種經常使用的方法,咱們不設j, 混着算,就是所有從0,0 到 右上,而後減去不合法的, 不合法的枚舉第一次不合法出如今哪裏,而後暴力枚舉0到i-1再乘組合數算web
本文分享 CSDN - ruclion。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。數組