本文主要是介绍分治算法设计:切割篱笆问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
切割篱笆问题
假设有道篱笆用N个同宽的木条拼接而成。因年久失修,有些木板已经折断,因而整个篱笆呈现出参差不齐的轮廓,所以要用新的木板替换。不过为了环保,可以用一部分旧篱笆切割出长方形的木板充当木料。图(b)表示在(a)形状的篱笆中能切割出的最大长方形。给定构成篱笆的各个木板的高度,编写程序计算能够切割出的最大长方形面积。不能斜线切割,即不允许采用如图(c)的切割方法。
图1 切割篱笆问题
暴力算法
给出保存各个木板高度的数组h[],截取第l个木板到第r个木板的长方形面积可用如下公式表示:
最简单的解法就是,用双重for语句把可能的l和r值都带入上述公式,求出最终答案。于是可以得到一个时间复杂度的暴力算法。
// 给定保存木板高度的数组h[]时,返回长方形的最大宽度。
int bruteforce(const vector<int>&
这篇关于分治算法设计:切割篱笆问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!