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:因为没有补题通道,这篇只交流思路。如果有错误恳请指出。

posted @ 2021-05-21 16:07  lx_tyin  阅读(894)  评论(0编辑  收藏  举报