只能一格一格跳

运行下面这段程序: 本节模型:jump_best——从第 0 格出发,每次往右跳 1~k 格,得分是踩过的格子之和,求跳到最后一格的最高得分。dp[i] 要从前 k 格里 dp 最大的那一格转移过来,这个「区间最大」交给单调队列。 #inc

开始练习 →

补全:从最好的那格转移

补全 jump_best:dp[i] 要接在前 k 格里 dp 最大的那一格(队首)后面。补全后输出最高得分。 本节模型:jump_best——从第 0 格出发,每次往右跳 1~k 格,得分是踩过的格子之和,求跳到最后一格的最高得分。dp[

开始练习 →

补全:保持队首最大

补全 jump_best:新的 dp[i] 入队前,队尾 dp 不比它大的都弹掉。补全后输出最高得分。 本节模型:jump_best——从第 0 格出发,每次往右跳 1~k 格,得分是踩过的格子之和,求跳到最后一格的最高得分。dp[i] 要

开始练习 →

补全:跳不过来的要出队

补全 jump_best:队首下标离 i 超过 k 格就跳不过来了,要出队。补全后输出最高得分。 本节模型:jump_best——从第 0 格出发,每次往右跳 1~k 格,得分是踩过的格子之和,求跳到最后一格的最高得分。dp[i] 要从前

开始练习 →

补全:起点的得分

补全 jump_best:起点第 0 格一定要踩,dp[0] 就是 a[0]。补全后输出最高得分。 本节模型:jump_best——从第 0 格出发,每次往右跳 1~k 格,得分是踩过的格子之和,求跳到最后一格的最高得分。dp[i] 要从前

开始练习 →

最大矩形用什么结构

在柱状图里找最大矩形面积,最优做法用【0】。 本节模型:largest_rect 用单调栈求柱状图最大矩形,末尾放一根高 0 的哨兵柱子。

开始练习 →

弹出时宽度由谁决定

第 1 步:数字是柱子的高度 第 2 步:弹出高 2:宽 1,面积 2 第 3 步:5 比栈顶高:进栈 第 4 步:6 比栈顶高:进栈 第 5 步:弹出高 6:宽 1,面积 6 第 6 步:弹出高 5:宽 2,面积 10 第 7 步:弹出高

开始练习 →

最大矩形面积

运行下面这段程序: 本节模型:largest_rect 用单调栈求柱状图最大矩形,末尾放一根高 0 的哨兵柱子。 #include <algorithm> #include <deque> #include <

开始练习 →

全等高的柱子

运行下面这段程序: 本节模型:largest_rect 用单调栈求柱状图最大矩形,末尾放一根高 0 的哨兵柱子。 #include <algorithm> #include <deque> #include <

开始练习 →

补全:矩形的弹栈条件

补全 largest_rect:遇到不高于栈顶的柱子,就把栈顶弹出来结算。补全后输出最大面积。 本节模型:largest_rect 用单调栈求柱状图最大矩形,末尾放一根高 0 的哨兵柱子。 (本题用 g++ -std=c++17 -O0 编

开始练习 →