原创 Codeforces Good Bye 2017 D. New Year and Arbitrary Arrangement

首先考 慮dp [i] [j] 表示 i 個a j個子序列ab 時候執行算法的期望 那麼轉移就是dp[i][j] = ( pa * dp [i+1][j] + pb * dp[i][i+j] ) / (pa + pb) 因爲長度可

原创 SPOJ - QTREE Query on a tree

給一棵樹 修改邊權和詢問路徑上的最大邊權 樹鏈剖分 把每條重鏈變成一條線段 然後用線段樹來記錄每條線段 查詢的時候再用lca的方法往上走直到到達同一條重鏈 #include <iostream> #include <algor

原创 CS Academy Round #74 (Div. 2 only) A B C D E

A找出有多少獨角獸 因爲範圍很小 所以枚舉即可 int a,l,h; sddd(a,l,h); for(int i=0;i<=a;++i) { int leg = l - i*4;

原创 Painting the balls SGU - 183

定義 dp[i][j] 表示最後一個在位置i 倒數第二個在j時候的代價 這個複雜度是O(n*m*m)的 所以需要優化 轉移的時候是枚舉ijk 三個點 優化實際上就是固定了中間那個點j 移動最後面的點i 往前移動i的同時用

原创 51nod 1052 最大M子段和

dp[i]表示把前i個數分成x份的最大和 pre[i]表示把前i個數分成x-1份的最大和 進行m次dp #include <iostream> #include <algorithm> #include <sstream> #i

原创 True Liars POJ - 1417

題意: 有p1個好人,p2個壞人 好人只說真話 壞人只說謊話 給出n句某個人說某個人是真人還是壞人 問是否存在好人和壞人方案的唯一解 有的話則升序輸出好人 先用一個帶權並查集維護一個聯通塊內的關係 然後dp[i][j]

原创 Codechef CSUBSEQ February Cook-Off 2018 Chef and Chefness

用dpijkl記錄每個狀態的子序列最大長度 i,j,k,l表示以c,h,e,f結尾的合法子序列個數 因爲k<=32所以每個最多只需要記錄到32 假如當前f結尾的合法子序列個數=K 那麼後面的f都得刪掉 #include <i

原创 Damn Couples ZOJ - 3161

考慮一串相鄰的關係 設f[i]爲有i個人的時候最多剩下的人 那麼轉移就爲 f[ i ] = max( f[ i ] , min ( f[ i-j ] + f[ j-1 ] , f[ i-j-1 ] + f[ j ])( j<

原创 Codeforces 955C - Sad powers

http://codeforces.com/problemset/problem/955/C 假設p=2 那麼底數範圍是1~1e9 假設p>=3 那麼底數範圍是1~1e6 並且後面的數的power會遞增得越來越快 所以可以考

原创 SGU 143 Long Live the Queen

求一棵樹上的聯通子圖使得其所有節點權值和最大 樹形dp dp[u]表示這個結點爲根的最大權聯通子圖 轉移爲dp[u] = val[u] + sum( max(0,dp[v]) ) 假如選兒子節點的貢獻爲負則不選 #inclu

原创 Game of Dice GYM101532E

http://codeforces.com/gym/101532/problem/E meet in the middle 分成兩份 然後後一份最終得到的A需要得到X時的B A*B = X mod (1e9+7) B = X*

原创 nowcoder 小AA的數列

https://www.nowcoder.com/acm/contest/35/B 轉成前綴和的話假設以i爲首那就是要求ai^a(i+L) + …… + ai^ a(i+R) 假如ai的某個位上x 對區間上的這個位求一下1^x的

原创 Prince and Princess UVA - 10635

找出兩個序列的最長公共子序列 因爲每個序列中每個數只出現一次 所以可以先記錄每個數字在第一個序列中出現的位置 再把第二個序列的數字換成這個數字在第一個序列中出現的位置 這樣求一個最長上升子序列就是答案 #include <i

原创 自己的vimrc

"Version: 1.0 by momodi@whuacm "Modified by [email protected] source $VIMRUNTIME/mswin.vim behave mswin imap <c

原创 Educational Codeforces Round 58 (Rated for Div. 2) F (單調dp)

http://codeforces.com/contest/1101/problem/F 容易發現對於每種起點終點組合的種類數很少 所以考慮對於不同組合的最優答案 用dp[ i ][ j ][ k ] 記錄對於一個起點 i 到終點 j