UVA 437 The Tower of Babylon 题解(DAG上的DP+神奇的数组索引设置)

本文是关于UVA 437 'The Tower of Babylon'问题的题解,通过动态规划(DP)方法解决。文章详细分析了如何将问题转化为DAG上的最长路径问题,并讨论了如何巧妙地设置二维DP数组的索引来避免空间浪费和数组越界问题,最后给出了代码实现。
摘要由CSDN通过智能技术生成

题目传送门:UVA 437 巴比伦塔

题意:有n(n≤30)种立方体,每种都有无穷多个。要求选一些立方体摞成一根尽量高的柱子(可以自行选择哪一条边作为高),使得每个立方体的底面长宽分别严格小于它下方立方体的底面长宽。

分析:这个一看就是DAG上的最长路,瞬间写出状态转移方程:

以dp[i][j]表示当前立方体长款分别为i和j,往它上面堆立方体,使其满足条件的最大高度

则dp[i][j] = max(dp[x][y]+h),x,y,h是某个立方体的长宽高并且满足x<i,y<j

这样写起来很简单啊,问题是题目并没说长宽范围,二维的dp数组不知道该开多大。。。

既然是二维的,那数字应该不是很大,就设置为1000好了,然后:

额,尴尬,好吧,设置成10000吧,数据再大就没法做了啊,于是~~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值