风雪梦

柳絮因风起

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  4 Posts :: 76 Stories :: 3 Comments :: 0 Trackbacks

常用链接

留言簿

我参与的团队

搜索

  •  

最新评论

  • 1. re: LightOJ1080 Binary Simulation
  • 话说加个PushDown操作不就OK了咩?
  • --仗剑奔走天涯
  • 2. re: 正式开博
  • 加油!
  • --leafcloudsky
  • 3. re: 启航杯啊
  • 太屎了!!我竟然就这么的WA了两次,最终发现,第四题少了两句初始化,第五题把数组开错地方了,算法没问题,结果就这么从四题跌到二题,太伤不起了!!可怜我调spfa调了一晚上!!尼玛啊!!
  • --浅雨歌

阅读排行榜

评论排行榜

这道题的题目描述好混乱的说,但是读明白了就能看出来,实际上这道题是一个多重背包,但是,就那么写多重背包必然会超时,所以就有了一个优化,多重背包二进制拆分优化。
《背包九讲》中介绍过这种优化,但是昨天看了好久,没明白原理,所以求助+YY,总算是了解了。。
所谓二进制拆分优化,就是把n[i]个物品给拆分,每个物品占的空间是c[i],c[i]*2,c[i]*22,c[i]*23...c[i]*2k-1,c[i]*(n[i]-2k+1),实际上加和以后还是(c[i]*n[i]),物品的价值也是这么拆分,为什么这么拆分呢?思路来自于二进制数表示法,比如说510=1012,也就是说如果取5件i物品,相当于取第一件和第三件(20+22)所有的数都可以这么表示出来,所以可以说这么拆分了以后和原来是等价的,所以这么拆分当然就是合理的。
附AC代码:
view code
特别鸣谢:飞哥figo
posted on 2012-11-15 14:30 浅雨歌 阅读(95) 评论(0)  编辑 收藏 引用 所属分类: DP

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