pku 1948 Triangular Pastures(背包)

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

首先一个想法是,尽量凑出三条长度差不多的边,然后计算面积。

但是这样不对,我们并不能保证那就是最优解。

后来依照海伦公式写了个式子,看有没有极值什么之类的,未果。

最终觉得,还是枚举比较合适。

枚举第一条边的长度,我们需要快速知道第二条边和第三条边的取值的可能的组合。因为如果知道第二条边的长度,我们可以根据周长求到第三条边的长度,所以问题就变成了已知一条边,如何快速求另外一条边长度可能的取值,其实也就是子集和的问题。

解答方式很简单,就是在传统的背包问题上,多给它增加一个背包。

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]]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值