【BZOJ2709】水的二分加驗證。但是好像被讀入萎到了。。。
【BZOJ3229】強大的算法見此。被機房的一堆大神“推薦”,於是被坑了。。。寫了一個下午。。。
【BZOJ3631】這道題給我的啟示是:要多想想算法。開始一直在打樹鏈剖分,打到一半忽然在眾神犇的提(bi)示(shi)下,發現有O(N)的方法。試想:如果要支持區間修改(加減),最後再查詢,可以用什麼方法?固然,線段樹和樹狀數組等等都可以,但是最好的顯然是類似於前綴和的思想。比如在L~R加上一個數,可以再L處+K,在R+1處-K。然後最後的時候從頭到尾掃過去、累加即可。
那麼這道題實際上是在樹上做這個類似的操作。當然,求LCA的時候要用tarjan,否則效率又變回去了。
以下是代碼。wri是為了調整,最後輸出的是wri和sum的和。
void bfs(int k)
{
for (int i=1;i
【BZOJ3609】打表找規律。據說是版權問題?就不說了。
【BZOJ1212】啊哈哈哈,又被我DP使過去啦!
【BZOJ2823&1666&1667】以前查來的題解。。。好像是誰的論文來著。
【BZOJ1802】真的是好題。我們先來考慮在開頭的時候放的盡量的少。
①如果有兩個相鄰的紅格,那麼我可以在放好後之後到達任何一個點!於是第一問就是0。至於第二問,找出所有相鄰的紅格,直接用DP往左右掃。
for (int i=k-1;i;i--)
f[i]=min(f[i],f[i+1]+f[i+2]);
②否則必須在偶數格放棋子,掃一遍即可。
for (i=2;i
【BZOJ3574】題解傳送門(跪SYC大爺!)
【BZOJ1873】寫的天昏地暗!我覺得有必要貼一下代碼。
#include
#include
#include
【BZOJ1925*】至今還覺得奇怪的DP(遞推、組合數)。有空去看看。
【BZOJ1819】好題目!用dfs序的性質,樹狀數組維護,還要求LCA。開始忘了怎麼在dfs序的樹狀數組中維護某個點的子樹的信息,去問了RZZ,後來發現根本就是傻X問題啊。