首先一个想法是,尽量凑出三条长度差不多的边,然后计算面积。
但是这样不对,我们并不能保证那就是最优解。
后来依照海伦公式写了个式子,看有没有极值什么之类的,未果。
最终觉得,还是枚举比较合适。
枚举第一条边的长度,我们需要快速知道第二条边和第三条边的取值的可能的组合。因为如果知道第二条边的长度,我们可以根据周长求到第三条边的长度,所以问题就变成了已知一条边,如何快速求另外一条边长度可能的取值,其实也就是子集和的问题。
解答方式很简单,就是在传统的背包问题上,多给它增加一个背包。
DP[i][j][k]表示使用前i个木棍,能否凑出长度为j和k的两根木棍。
DP方程是DP[i][j][k]=DP[i-1][j-length[i]][k]=DP[i-1][j][k-length[i]]

本文介绍了一种使用背包问题的方法来解决给定一系列木棍如何构成具有最大面积三角形的问题。通过枚举和多维动态规划实现,具体阐述了DP状态转移方程,并给出了完整的C++代码实现。
235

被折叠的 条评论
为什么被折叠?



