A 水題不說
B 預處理前綴和
C 排序 Logn亂搞
D 動規
一開始你需要先處理出一條線段覆蓋[l,r],且右端點恰好在r上的最小代價。這一步是O(n,m)。
然后dp[i][j]代表前i個hole修復j個的代價。
dp[i][j] = min(dp[i-1][j], dp[p][j - (i - p)] + cost[p+1, i]);
E 真亂搞
首先, ( a + b ) % m = m - 1 等價于 a + b = m - 1
(a + b) % m = m - 2 等價于 a + b = m - 2 || a + b = m*2 - 2
以此類推。。(m ^ 2) 會超時,咱們可以逐個數字搞
對于數字 m - 1 , 一定先和 0 搞(得 m - 1), 然后 m - 1 對搞 (得 m - 2)
對于數字 m - 2 , 一定先和 1 搞(得 m - 1), 然后和 0 搞 (得 m - 2), 然后和 m - 1搞(得 m - 3) 然后 m - 2對搞(得 m - 4)
。。。(召喚徐嘉大神傳授亂搞算法)。。。
對于數字 m - i, 一定依次和 i - 1 .... 0 搞, 然后 m - 1 .... i 搞
其實都是從右向左搞,如果可以直接略過值為0的數字,那么就會優化到O(m)。
這個可以用并查集維護都是“0”的線段。
posted on 2013-05-31 20:48
西月弦 閱讀(396)
評論(0) 編輯 收藏 引用 所屬分類:
codeforces