索引消模:用 s2=s+s,则 Ar,c=s2[(n−r)+c],避免每格做取模。
最大矩形(全 0):维护直方图高度 H[c](当前行该列为 0 则 H[c]←H[c]+1,否则 H[c]←0),对每一行用单调栈在 O(n) 求“柱状图最大矩形”,总 O(n2)。
最大直角等腰三角形(全 0):两向 DP,自底向上、滚动一行,空间 O(n)、时间 O(n2)。
给定一个长度为n的二进制字符串s,由0和1字符组成。我们需要构建一个行数为n,列数为n的方表,由0和1字符组成。第一行为原始字符串 s,第二行为字符串s向右循环移动一个,第三行为字符串s向右循环移动两个,以此类推。
求表中所有由0组成的三角形或矩形的最大面积值。
第一行是字符串s。
第二行是字符串s向右循环移动一个位置。
第i行是字符串s向右循环移动i−1个位置。
输入一个长度为n的二进制字符串s,仅包含0和1字符,其中1≤n≤5000
在一行上输出n个整数,代表对于每一个i的答案。
输入
00110
输出
6
在构造的方表中,最大由0组成的三角形面积为6,构造的表格如下:
00110
00011
10001
11000
01100