本期讲解内容与上一期一致。
T1
考虑枚举“山顶”(即在行走路线中到达的海拔最高的地方)的位置来求解。
对于枚举到的一个“山顶” \(i\),显然此时最多浏览的景点数为“以 \(i\) 结尾的最长上升子序列的长度”加上“以 \(i\) 开头的最长下降子序列的长度”再减一。
对于求“以 \(i\) 开头的最长下降子序列的长度”,我们转化为求“以 \(i\) 结尾的最长上升子序列的长度”即可,只不过需要倒叙枚举。
T2
妙妙题。
很容易想到,两次买卖都可以选择任意两天 \((i,j)\),
第一次买卖选择前 \(i\) 天价格最低的那天买入,再在第 \(i\) 天卖出;
第二次买卖选择第 \(j\) 天买入,再在第 \(j\) 天后价格最高的那天卖出。
这样既保证了效益最大化,又避免了两段持有股票的区间相互重叠。
因此我们可以维护一个 \(dp_i\) 表示“最小前缀”(即前 \(i\) 天的最小值),\(f_i\) 表示“最大后缀”(即第 \(i\) 天后的最大值),
然后枚举任意两天 \((i,j)\),此时的答案为 \(a_i-dp_i+f_j-a_j\),对所有这样的答案取 \(\max\) 即为最终答案。
时间复杂度 \(O(Tn^2)\),显然是过不了的。
于是我们想到维护 \(dp_i\) 表示“前 \(i\) 天的最大利润”,\(f_i\) 表示“第 \(i\) 天后的最大利润”。
这样改动之后,答案即为 \(\max\{dp_i+f_i\}\),可以用 \(O(n)\) 的时间复杂度算出。
完结撒花~