第二屆飲料盃解題手冊 Beverage Cup II Solution Manual

I - Cow Families

有若干個 的數字,數字 恰好有 個。請問有幾種排列,使得它的最長嚴格遞增子序列(LIS) 長度恰好是 ?條件限制 ,所有 滿足

題解

有一個很重要的觀察,由於所有數字只有 的整數,因此 LIS 長度為 的時候這條 LIS 必定是

接下來有個觀察,徹底刻畫我們要的性質:

性質

若我們由左而右,將依序出現的第一個 標記起來(例如 ,我們會標記第 個數字)我們會發現:有標記的數字 和有標記的數字 之間,一定不會出現任何數字 (廢話)

但是這個廢話卻是至關重要的...廢話!

假想一下,我們依照以下方法建造所有 LIS 恰好是 的序列:讓 跑到 ,每一次一口氣把全部的 一起塞進 sequence 裡面。

動態規劃

怎麼塞呢?如此一來我們的狀態就很清楚了:「現在做到數字 」、「被標記的數字 出現在第 個位子上」。第一個維度是 ,第二個維度是

接下來是轉移,我們可以考慮的是,被標記的那個 是所有 之中的第 個!然後枚舉一下被標記的 出現的位置 。於是利用一點點的組合數我們可以寫下:

當然如果直接照著這個遞迴關係實作,就會得到一個 的作法,TLE。

多看兩眼

我們觀察遞迴關係的第三項,發現這一項與 並無任何關係!因此我們可以把這一項搬到前面去:

,我們有:

於是原式就會變成

就得到一個 的解了!

評論

這題稍微可惜了些...相較於後面的 Problem J, K, L,這題應該是最有機會在賽中被做出來的!

故事

這題是去年我出給 UMich 作為練習的唯二題目之一,當初做這題的時候自信滿滿跟 Mark (若干年前拿過 ICPC 第二名的強者) 說我可以做到 ,然後馬克做了很久跟我說...「只能做到 耶...」然後我就做不出來了XD