P5004 專心OI 跳房子

2022-07-10 14:45:11 字數 1183 閱讀 9943

傳送門

solution:

考慮線性dp。\(f[i]\)表示前\(i\)個格仔(僅限於跳到前\(i\)個格仔)有多少種跳法。則\(f[i] = f[1] + f[2] + ... + f[i - m - 1]\)。(不會打xigema,湊合著看吧)

然而\(n\)很大,無法用\(\operatorname(n)\)的時間來做。發現\(m\)很小,立刻想到矩陣乘法優化線性dp。

維護乙個\(m+1\)行\(1\)列的矩陣\(a\),\(a_=f[i],a_=f[i-1],...a_=f[i-m]\)。

初始矩陣為\(m+1\)行\(1\)列的矩陣\(a\),為\(f\)陣列的前\(m+1\)個數值。事實上\(f\)陣列的前\(m+1\)個數值全部都是\(1\)。所以初始化的矩陣的元素都是\(1\)(即從最左邊直接跳到該位置)。

如何轉移下圖的矩陣?注意到左右側相同元素均可匹配,那麼現在就求\(f[i]\)。

\(f[i] = f[i-1]+f[i-m-1]\)。由第一行的公式可知\(f[i-1]\)代表的就是\(f[1]+f[2]+ ... +f[i-m-2]\)。

答案:將最後的f陣列的元素都加起來。因為現在在這些格仔上都可以一步跳到無限大。

時間複雜度\(\operatorname(m^3logn)\)。

P5004 專心OI 跳房子 解題報告

把 n 個無色格仔排成一行,選若干個格仔染成黑色,要求每個黑色格仔之間至少間隔 m 個格仔,求方案數 根據題面,這一題似乎可以用遞推 設第 i 個格仔的編號為 i 有 i 個格仔時的方案數為 f i 顯然,當 i le m 1 時,可以所有格仔不染色 方案數為 1 種,或者最多有乙個格仔染色 方案數...

P5004 專心OI 跳房子 dp,矩陣乘法

把n nn個無色格仔排成一行,可以把某些格仔染成黑色,但兩個黑色格仔之間必須至少有m mm個無色格仔,求方案數 首先很明顯 f n i 0 n m 1f if n sum f i fn i 0 n m 1 fi 然後我們發現 i 0n m 1fi sum f i i 0n m 1 fi 就是字首和,...

題解 P3957 跳房子

題目鏈結 題目大意 給定 n 個格仔離原點距離以及權值,初始單次移動距離只能為 d 你可以花費 g 枚金幣使得單次移動距離變為 max d g,1 d g 內任意整數,問獲得權值至少為 k 最少需要花費多少枚金幣 單調佇列 分析 顯而易見答案具有單調性,因為花費金幣越多機械人越靈活,花費金幣少的可行...