2021年ICPC銀川B題 The Great Wall


題意:給你一排\(n\)個塔,每個塔有一定高度,需要將塔划分為\(k\)個區間,每個區間的收益為區間最大值與最小值之差,求\(k=1,2,3..n\)時的最大收益。

第一反應是倒過來搞,\(k=n\)時答案為0,把區間的拆分改為區間的合並。

但極差太難以遞推,賽場上最終沒有想出正解。

事后翻知乎,看到了大佬的一個很簡單的思路:

B題 dp

直接dp,極差不方便轉移

把差轉化成 \(=a[i]-a[j]\)\(i,j\)為區間內任意值)

不改變答案顯然,

?滿頭問號?為啥可以直接把極差改成任意的 \(a[i]-a[j]\) 了?

仔細想一下,每個區間任取兩個數相減,得到的結果一定小於極差。

那么考慮所有取法,得到結果的最大值和只取極差是一樣的。

我們取所有\(a[i]\)的權重為1,\(a[j]\)的權重為-1,其余數權重為0,每個區間取一對±1即可

\(dp[i,j,k]\)表示前\(i\)個數,已經取了\(j\)個區間(即\(j\)\(±1\));

\(k=0/1/-1\),表示下一個區間已經包含了\(k\)

可以列出狀態轉移方程:

\[dp[i,j,0]=max \left\{ \begin{aligned} &dp[i-1,j,0]\\ &dp[i-1,j-1,-1]+a[i]\\ &dp[i-1,j-1,1]-a[i] \end{aligned} \right. \]

\[dp[i,j,1]=max \left\{ \begin{aligned} &dp[i-1,j,1]\\ &dp[i-1,j,0]+a[i]\\ \end{aligned} \right. \]

\[dp[i,j,-1]=max \left\{ \begin{aligned} &dp[i-1,j,-1]\\ &dp[i-1,j,0]-a[i]\\ \end{aligned} \right. \]

PS:因為沒有補題通道,這篇只交流思路。如果有錯誤懇請指出。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM