box stacking 问题(From MIT)

sosidami 2013-03-04 04:37:45
问题:
You are given a set of n types of rectangular 3-D boxes, where the i^th box has height h(i), width w(i) and depth d(i) (all real numbers). You want to create a stack of boxes which is as tall as possible, but you can only stack a box on top of another box if the dimensions of the 2-D base of the lower box are each strictly larger than those of the 2-D base of the higher box. Of course, you can rotate a box so that any side functions as its base.

限制条件,每个box只准使用一次,求的是使用这些box,可以组成最高的stack是多高?

如果没中box无限次使用是经典的动态规划,sort + LIS 就可以解决,但是只准使用一次如何解?
...全文
181 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
sosidami 2013-03-06
  • 打赏
  • 举报
回复
引用 7 楼 FancyMouse 的回复:
引用 6 楼 sosidami 的回复:引用 5 楼 FancyMouse 的回复:引用 4 楼 FancyMouse 的回复:引用 2 楼 sosidami 的回复:引用 1 楼 FancyMouse 的回复:>如果没中box无限次使用是经典的动态规划 你确定你知道你在说什么么?sort+LIS解决的是每种用1次的问题。每种可以用无限次的话,其实也只能用最多2次。最终……
恩,我的问题就在这里。如果必须按照原始顺序的话,MIT的那个方法就是对的。这个是从MIT的一个算法习题集里面来的,应该是全的。可能那个人没有把条件写全。 如果stack数目比较少,可以用压缩状态的动态规划。如果比较多,没想到方法
FancyMouse 2013-03-06
  • 打赏
  • 举报
回复
引用 6 楼 sosidami 的回复:
引用 5 楼 FancyMouse 的回复:引用 4 楼 FancyMouse 的回复:引用 2 楼 sosidami 的回复:引用 1 楼 FancyMouse 的回复:>如果没中box无限次使用是经典的动态规划 你确定你知道你在说什么么?sort+LIS解决的是每种用1次的问题。每种可以用无限次的话,其实也只能用最多2次。最终也是用的sort+LIS。 你看一……
等等……它这个dp是默认在给定的bi顺序下的,也就是说bj要堆到bi上的话还要有i<j的条件……这样看来就不对了。除非有另外的你没贴出来的地方假设了这个附加条件。 对于原来的问题,仔细想了想还真没啥多项式的办法……
sosidami 2013-03-06
  • 打赏
  • 举报
回复
引用 5 楼 FancyMouse 的回复:
引用 4 楼 FancyMouse 的回复:引用 2 楼 sosidami 的回复:引用 1 楼 FancyMouse 的回复:>如果没中box无限次使用是经典的动态规划 你确定你知道你在说什么么?sort+LIS解决的是每种用1次的问题。每种可以用无限次的话,其实也只能用最多2次。最终也是用的sort+LIS。 你看一下这个吧, http://stackove……
问题就在于 1 你初始的时候的box的顺序是什么样子的呢? 2 H[j,R1] -> H[k,R2]-> H[j,R3] 这种情况是如何避免的?
FancyMouse 2013-03-06
  • 打赏
  • 举报
回复
引用 4 楼 FancyMouse 的回复:
引用 2 楼 sosidami 的回复:引用 1 楼 FancyMouse 的回复:>如果没中box无限次使用是经典的动态规划 你确定你知道你在说什么么?sort+LIS解决的是每种用1次的问题。每种可以用无限次的话,其实也只能用最多2次。最终也是用的sort+LIS。 你看一下这个吧, http://stackoverflow.com/questions/23……
哦不对看错了。虽然我的dp和他的dp不一样但是本质上是同一回事。他那个有重复的时候是对的。 然后你贴的那个dp也是对的。它的状态是每个box和每个box的旋转状态。当一个box和它的旋转状态确定的时候,后效性就已经没有了。在dp转移的时候,只要不从H(j,R1)转移到H(j,R2)的话,那么每个box不会被使用多于一次。
FancyMouse 2013-03-06
  • 打赏
  • 举报
回复
引用 2 楼 sosidami 的回复:
引用 1 楼 FancyMouse 的回复:>如果没中box无限次使用是经典的动态规划 你确定你知道你在说什么么?sort+LIS解决的是每种用1次的问题。每种可以用无限次的话,其实也只能用最多2次。最终也是用的sort+LIS。 你看一下这个吧, http://stackoverflow.com/questions/2329492/box-stacking-p……
那个best answer是错的。下面的comment已经有人指出了。
sosidami 2013-03-05
  • 打赏
  • 举报
回复
引用 1 楼 FancyMouse 的回复:
>如果没中box无限次使用是经典的动态规划
你确定你知道你在说什么么?sort+LIS解决的是每种用1次的问题。每种可以用无限次的话,其实也只能用最多2次。最终也是用的sort+LIS。



主要问题源于此,但是我不能理解他怎么处理重用的情况。
sosidami 2013-03-05
  • 打赏
  • 举报
回复
引用 1 楼 FancyMouse 的回复:
>如果没中box无限次使用是经典的动态规划 你确定你知道你在说什么么?sort+LIS解决的是每种用1次的问题。每种可以用无限次的话,其实也只能用最多2次。最终也是用的sort+LIS。
你看一下这个吧, http://stackoverflow.com/questions/2329492/box-stacking-problem 如果每种使用一次,你怎么按照base的面积进行sort??
FancyMouse 2013-03-04
  • 打赏
  • 举报
回复
>如果没中box无限次使用是经典的动态规划 你确定你知道你在说什么么?sort+LIS解决的是每种用1次的问题。每种可以用无限次的话,其实也只能用最多2次。最终也是用的sort+LIS。

33,007

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧