原创 BZOJ1024

傳送門:BZOJ1024 首先注意到以下事實:每一刀必然割在kn處,其中k∈N+ 然後就可以深搜了。 代碼上的小細節見下。 #include <cstdio> #include <cstdlib> #include <cmath>

原创 BZOJ1009

傳送門:BZOJ1009 KMP構造轉移矩陣,矩陣加速DP。 以後題解都會簡單一些。 /************************************************************** Pro

原创 BZOJ1798

傳送門:BZOJ1798 雙狀態的線段樹,注意優先級。 #include <cstdio> #include <cstdlib> #include <iostream> #include <algorithm> #include

原创 BZOJ1017

傳送門:BZOJ1017 比較複雜的樹形Dp。 複雜的是這道題Dp方程的定義:fi,j,k 表示以節點i爲根的子樹,向i的父節點提供j個物品,在子樹上總花費k元能得到的最大力量值。 轉移時我們先不考慮以i爲根的子樹合成了n個i卻

原创 BZOJ1044

傳送門:BZOJ1044 第一問:傻逼二分,設答案爲ans,二分貪心即可。 第二問:f(i,j) 表示第i刀切在第j處的合法方案數 轉移是f(i,j)=∑len[k,j]≤ansj−1f(i−1,k) 顯然這個Dp空間是O(n

原创 BZOJ1047

傳送門:BZOJ1047 我們用f(i,j)表示第j列上區間[max(i-n+1,1),i]的最小值。 這一步的轉移可以用單調隊列來完成。 然後,我們用g(i,j)來表示以點(i,j)爲右下角的邊長爲n的正方形中元素的最小值。

原创 BZOJ1046

傳送門:BZOJ1046 反着構造f(i),表示以i結尾的最長的下降子序列。這就等效於以i開頭的最長的上升子序列。 然後枚舉即可。 #include <cstdio> #include <cstdlib> #include <cm

原创 BZOJ1051

傳送門:BZOJ1051 Tarjan算法求強聯通分量,縮點,記錄出度。 現學的Tarjan算法……++cnt寫錯了orz。 最近眼睛不舒服,做題好慢…… 代碼上的小細節見下。 #include <cstdio> #inclu

原创 POJ3368

傳送門:POJ3368 注意到不降,於是序列一定是連續的。 然後就是傻逼題了。 代碼上的小細節見下。 #include <cstdio> #include <cstdlib> #include <cstring> #inclu

原创 BZOJ1050

傳送門:BZOJ1050 CODEVS上做過這道題,當時寫了一個二分+貪心…… 今天回來看發現就是傻逼貪心。 枚舉最大值,貪心最小值,並查集維護即可。 代碼上的小細節見下。 #include <cstdio> #includ

原创 BZOJ1025

傳送門:BZOJ1025 首先,容易證明解的存在性。 於是排數就等於1回到1,2回到2…所需步數的lcm。 然後,容易發現∑ib(i)=n 其中i取一類步數爲b(i)的i,i’,i”… 於是問題變成已知k個正整數的和爲n,求

原创 BZOJ1029

傳送門:BZOJ1029 還記得線段覆蓋嗎? 我們將建築物按Deadline排序,然後掃描排序後數組,如果當前建築物可以被修建,則修建,否則,如果當前建築物所用時間小於修過的建築物最大時間,則放棄最大時間,改修它。 這個算法的正

原创 BZOJ1034

傳送門:BZOJ1034 類似田忌賽馬的貪心。 按照 我的最小能否贏過敵方最小?[1] 是:贏過,迭代 否:我的最大能否贏過敵方最大?[2] 是:贏過,迭代 否:我方最小比拼對方最大,迭代。

原创 BZOJ2882

傳送門:BZOJ2882(權限題) 最小表示法的模板。 傳送門:周神論文 代碼上的小細節見下。 #include <cstdio> #include <cstdlib> #include <cmath> #include <cst

原创 POJ2752

傳送門:POJ2752 傻逼題,注意前綴函數的定義就行了。 代碼上的小細節見下。 #include <cstdio> #include <cstdlib> #include <cmath> #include <cstring> #