P1873 [COCI 2011/2012
思路分析
典型的二分答案问题。求满足条件的最大高度,用开区间二分模板。
- 在输入时记录树的最大高度作为二分右边界
check(mid):遍历所有树,计算以mid高度砍树能获得的木材总长- 如果木材足够(
>= M),说明高度还能抬高,左边界右移;否则右边界左移 - 最后输出左边界(包含了等于
M的情况)
高度越低,砍到的木材越多;高度越高,木材越少。
代码实现
1 | int l = -1, r = highest + 1; |
小结
- 二分答案的 check 函数通常就是直接模拟,不会超时
- 开区间二分写法:
l = -1, r = max + 1,循环条件l + 1 < r
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Alignm-ent!
