pku3124 The Bookcase 扩展背包好题

题意:
一堆书,每本书都有厚度和高度,管理员试图将这些书放到三层的书架上,每层都不能为空,求书架最小体积(书架深度显然为所有书深度最大值,所以与排放方案无关,故取1).
体积公式:
解题思想:
大概思路是DP,这个要先定下来
设v=(f(s1)+f(s2)+f(s3))*max{g(s1),g(s2),g(s3)}
其中g(s3)=SUM-g(s1)-g(s2)
f(s3)=max(hi)
就说说,我们有4个决策变量
一个变量留给DP决策,另一个变量利用DP状态设计来消除(这就需要对初始数据排序,保证决策过程中hi<=hp2,i属于s2,p2为当前决策点)。
这个问题就转化为在一个有序队列上选择两个分割点p1,p2,hp1<hp2,使得max{hi,i属于s1}<p1,max{hi,i属于s2}<p2,并且s1,s2,s3均不为空
状态可以设计为
F(i,t1,t2)
即考虑到第i个元素,s1的总厚度为t1,s2的总厚度为t2时p1所在元素的高度的最小值。
F(i,t1,t2)=min(F(i-1,t1,t2-data[i].t),data[i].h(当F(i-1,t1-data[i].t,t2)合法时),F(i-1,t1,t2)),显然,三个转移意义分别为将当前元素分配给s2、s1、s3
当F(i,t1,t2)由F(i-1,t1,t2-data[i].t)转移过来的时候试图更新全局最优解ans=min(ans,(data[i].h+F(i,t1,t2)+data[n-1].h)*t1*t2*(ttotal-t1-t2))。注意,这里说F(i,t1,t2)由F(i-1,t1,t2-data[i].t)转移过来指的是F(i-1,t1,t2-data[i].t)<=min(data[i].h(当F(i-1,t1-data[i].t,t2)合法时),F(i-1,t1,t2)),等于不能丢掉(原因?只有此时才能更新全局最优解)
代码如下

posted on 2011-07-31 21:20 yzhw 阅读(175) 评论(0)  编辑 收藏 引用 所属分类: DP


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2011年1月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
303112345

导航

统计

公告

统计系统

留言簿(1)

随笔分类(227)

文章分类(2)

OJ

最新随笔

搜索

积分与排名

最新评论

阅读排行榜