B_station解题报告(sgu148 枚举+堆).docVIP

  1. 1、本文档共2页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
B_station解题报告(sgu148枚举堆)

试题翻译 SGU148 B-Station 试题描述 在离著名的国家Berland不远的地方,有一个水下工作站。这个工作站有N层。已知:是第i层装有Wi的水,最多可以容纳Li的水,恐怖分子炸毁第i层的代价是Pi。第i层一旦被炸毁,该层所有的水都将倾泻到第i+1层。如果某一层的水量超过了它的容量(即Li),那么该层就将自动被毁坏,所有的水也会倾泻到下一层。 Pivland的恐怖分子想要用最少的钱毁掉第N层,现在他雇佣你来计算,需要炸毁哪些层。 输入 第一行有一个自然数N(1=n=15000)。接下来的N行,每行3个整数Wi, Li, Pi(0=Wi,Li,Pi=15000)。 输出 输出需要炸毁的层的编号。 样例 Input 3 1000 1000 1 0 1000 2 2 10 100 Output 1 2 解题报告 B-Station解题报告 【题意分析】 令Si=W1+W2+…+Wi(特别的S0=0)。 不妨设恐怖分子炸毁的第高层是第p层(第一层是最高层,第N层是最底层)。 因为恐怖分子的目标是毁灭第N层,所以水必须从第p层一直泻下去。如果存在一个i,满足Wp+Wp+1+…+Wi-1+Wi=Li,也就是说前面几层的水全部泄下来也无法把第i层自动冲毁,那么就必须要使用炸药把它炸开了。 所以恐怖分子需要炸毁的层的集合就是Bomb[p]={p}∪{i |ip Si-Sp-1=Li} 令Qi=Si-Li,那么: Bomb[p]={p}∪{i |ip Qi=Sp-1} 我们枚举p,然后看哪些层需要炸毁。这样就得到了一个O(n2)的算法。 【设计算法】 n=15000,O(n2)的算法效率太低。 注意到Sp是随着p的增加而递增的,观察两个集合: Bomb[p]={p}∪{i |ip Qi=Sp-1} Bomb[p-1]={p-1}∪{i |ip-1 Qi=Sp-2} 因为Sp-2=Sp-1,所以{i |ip-1 Qi=Sp-2}Bomb[p]。 也就是说,Bomb[p-1]是在Bomb[p]的基础上,通过以下操作得到的: 删除所有的i∈Bomb[p],QiSp-2。 添加p-1。 针对这两种操作,我们可以使用大根堆(Heap)。从大到小枚举p,对于每一个p,执行: Step1. 如果堆的根i满足Qi Sp-2,那么删除根;否则转Step3。 Step2. 转Step1。 Step3. 添加p-1。 每层至多进堆一次、出堆一次,所以总的时间复杂度是O(nlogn)。对于n=15000的范围完全能够胜任了。

文档评论(0)

zsmfjy + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档