今天的題目似乎很水……?好多人都提前ak離場了,於是提前一小時收題。
但是我還是各種不會。
思維江化???
話說,聽到一句很有趣的話:
山不在高,有林則徐;水不在深,有江……
題意:給定一棵有n(
n≤105
) 個節點的有根樹,編號互不重複。詢問有多少棵子樹內節點編號構成乙個連續區間。
題解:水題,對於每個節點
i ,記錄以該節點為根的子樹中最大和最小節點的編號ma
x(i)
、min
(i)以及子樹的節點個數we
ight
(i) ,若該子樹內節點編號構成連續區間,則ma
x(i)
−min
(i)=
weig
ht(i
)−1 。
開場秒掉一題,開開心心對拍完,然後就開始了噩夢……
題意:對於乙個1∼
n(n≤
1001
) 的排列,定義一種表示方式。若排列中相鄰兩個元素後面乙個大於前面,用
i 表示;若前面大於後面,用
d表示。如排列3,
1,2,
7,4,
6,5 可以表示為di
idid
。現給出乙個長度為n−
1 的排列表示,問有多少種排列滿足這種表示。排列由i、
d、? 組成,
? 表示該位置既可以是
i,也可以是
d 。
題解:考慮動態規劃。用f[
i][j
]表示排列的第
i 位在i∼
n−1位中是第
j 小的數的情況的排列數。若字串的第i−
1位為i ,則f[
i][j
]=σj
k=1f
[i−1
][k]
。d和?
同理。觀察發現該轉移方程可以用字首和優化,實現o(
1)轉移。
似乎很水的一道題,但是考場上完全沒有思路。dp經驗還是不足啊。
題意:給定兩個字串x、
y(1≤
|x|,
|y|≤
1000
) 。令
l 為x和
y 的最長公共子串行長度,詢問
x的所有長為
l 的子串行中,有多少個也是
y的子串行。
題解:再次考慮動態規劃。首先o(
n2) 預處理出dp
陣列,其中dp
[i][
j]表示
x 串長為
i的字首與
y 串長為
j的字首的最長公共子串行長度。轉移方程:dp
[i][
j]={
max(
dp[i
−1][
j−1]
,dp[
i−1]
[j],
dp[i
][j−
1])m
ax(d
p[i−
1][j
],dp
[i][
j−1]
)x[i] = y[j]
x[i]
≠y[j]
(似乎這樣寫很醜……)
接著用d
p 陣列計算
f 陣列。f[
i][j
]表示x 串長為
i的字首中,長度恰好為dp
[i][
j]的子串行,且同時也是
y 串長為
j的字首的子串行的個數。記p[
i]為y
串中第i個字元,在它之前與它相同的字元的最大下標。f[
i][j
]+={
f[i−
1][p
[j]−
1]f[
i−1]
[j−1
]x[i] = y[j],dp[i][j] = dp[i - 1][p[j] - 1] + 1
dp[i][j] = dp[i - 1][j - 1] f
[|x|
][|y
|]即為答案。
思維難度略高於上題……考場上完全想歪了orz。
日常訓練無限墊底,要振作起來啊。
稻花香裡說豐年,聽取wa聲一片。老老實實寫小暴力、對拍!
訓練日記 20161024
初賽好像不會掛了,好開心!版權原因,不上傳題目。題意 求1 n n 1000 的排列中逆序對恰好為 k 個的排列數目。多測。題解 f i j 表示前 i 個數,逆序對個數恰好為 j的排列個數,易得轉移方程f i j i 1k 0f i 1 j k 用字首和優化可使複雜度降為o n2 題意 對於乙個長...
訓練日記 20170324
長久不更新部落格了。期間經歷了恰好被ag線踩的wc,經歷了漫長痛苦的小高考準備。現在終於可以重整旗鼓,向省選進發!幾個月來,唯一不變的是我仍然是個超級蒟蒻 版權原因,不上傳題目。題意 最小樹形圖 去年就接觸 聽說 過的演算法,一直沒有真正寫過。因為各種奇怪的細節錯誤,調了好幾個小時 比如找環時沒有判...
訓練日記 20170419
題意 二維平面上有n n 200,000 個傳送門,第i 個傳送門位於 x i,yi 且可以傳送到以自身位置為左下角,以 a i,bi 為右上角的平行座標軸的矩形中任何乙個其他傳送門。任意選定起點和終點,求從起點傳送到終點的路徑上最多經過多少個傳送門。座標範圍在0 200,000 之間。空間限制51...