AlgoMooc
你已开通华为OD训练营权益,还差最后一步——完成入营激活(兑换课程 + 加飞书 + 登记服务群),即可解锁全部课程与专属服务。去激活 →
← 返回题库

P3202. 区块链文件转储系统

困难通过率 66% · 提交 561 · 通过 373
滑动窗口双指针前缀和不定滑窗

小慕负责维护一个链式存储系统,该系统由顺序排列的 N 个数据块组成,每个数据块的大小不同,依次为 F1, F2, …, Fn。随着项目运行,存储占用越来越大。小慕计划将这些数据块迁移到廉价的备份磁盘上,但只有连续的数据块才能一起迁移,且迁移的数据块总大小不能超过备份磁盘的容量。假设每块备份磁盘的容量为 M,小慕想知道能一次性迁移的连续数据块的最大总大小是多少。

提示:带虚线的词点一下有通俗解释。

输入描述

第一行为 SATA 盘容量 <code>M</code>,<code>1000 ≤ M ≤ 1000000</code> 第二行为区块链文件大小序列 <code>F1, F2, …, Fn</code>。其中 <code>1 ≤ n ≤ 100000</code>,<code>1 ≤ Fi ≤ 500</code> </p> </p> <span data-lark-record-data="{"rootId":"J07dd1cWko2AfKxcRSWcTy7ln4y","text":{"initialAttributedTexts":{"text":{"0":"第一行为 SATA 盘容量 M,1000 ≤ M ≤ 1000000\n第二行为区块链文件大小序列 F1, F2, …, Fn。其中 1 ≤ n ≤ 100000,1 ≤ Fi ≤ 500"},"attribs":{"0":"*0+5*1*0+4*0+5*0*2+1*0+1*0*2+i*0|1+1*0+e*0*2+d*0+4*0*2+e*0+1*0*2+c"}},"apool":{"numToAttrib":{"0":["author","7115054903550050305"],"1":["abbreviation-data","{\"id\":\"5d0f432c-9226-4f2a-bb96-ac633083b689\",\"abbr_ids\":\"enterprise_7243782584512069634\",\"is_visible\":1,\"is_first\":1}"],"2":["inlineCode","true"]},"nextNum":3}},"type":"text","referenceRecordMap":{},"extra":{"mention_page_title":{},"external_mention_url":{}},"isKeepQuoteContainer":false,"isFromCode":false,"selection":[{"id":6,"type":"text","selection":{"start":0,"end":93},"recordId":"doxcnle3zQzt78Pa7qau9w4ouNb"}],"payloadMap":{},"isCut":false}" data-lark-record-format="docx/text" class="lark-record-clipboard"></span> <p> <br /> </p> <span data-lark-record-data="{"rootId":"J07dd1cWko2AfKxcRSWcTy7ln4y","text":{"initialAttributedTexts":{"text":{"0":"第一行为 SATA 盘容量 M,1000 ≤ M ≤ 1000000\n第二行为区块链文件大小序列 F1, F2, …, Fn。其中 1 ≤ n ≤ 100000,1 ≤ Fi ≤ 500"},"attribs":{"0":"*0+5*1*0+4*0+5*0*2+1*0+1*0*2+i*0|1+1*0+e*0*2+d*0+4*0*2+e*0+1*0*2+c"}},"apool":{"numToAttrib":{"0":["author","7115054903550050305"],"1":["abbreviation-data","{\"id\":\"5d0f432c-9226-4f2a-bb96-ac633083b689\",\"abbr_ids\":\"enterprise_7243782584512069634\",\"is_visible\":1,\"is_first\":1}"],"2":["inlineCode","true"]},"nextNum":3}},"type":"text","referenceRecordMap":{},"extra":{"mention_page_title":{},"external_mention_url":{}},"isKeepQuoteContainer":false,"isFromCode":false,"selection":[{"id":6,"type":"text","selection":{"start":0,"end":93},"recordId":"doxcnle3zQzt78Pa7qau9w4ouNb"}],"payloadMap":{},"isCut":false}" data-lark-record-format="docx/text" class="lark-record-clipboard"></span>

输出描述

求能转储的最大连续文件大小之和。 </div> </div> <span data-lark-record-data="{"rootId":"J07dd1cWko2AfKxcRSWcTy7ln4y","text":{"initialAttributedTexts":{"text":{"0":"求能转储的最大连续文件大小之和。"},"attribs":{"0":"*0+g"}},"apool":{"numToAttrib":{"0":["author","7115054903550050305"]},"nextNum":1}},"type":"text","referenceRecordMap":{},"extra":{"mention_page_title":{},"external_mention_url":{}},"isKeepQuoteContainer":false,"isFromCode":false,"selection":[{"id":8,"type":"text","selection":{"start":0,"end":16},"recordId":"doxcnRi5CWrtjGlOGkYrivmdUyd"}],"payloadMap":{},"isCut":false}" data-lark-record-format="docx/text" class="lark-record-clipboard"></span>

示例

示例 1

输入

1000
100 300 500 400 400 150 100

输出

950

时间限制 1000 ms · 内存限制 128 MB

看不懂题目?点开图解
不定滑窗示例:M=1000 F1=100 F2=300 F3=500 F4=400 F5=400 F6=150 F7=100 滑窗(连续文件) 400+400=800 ≤ 1000 最大连续和:100+300+500=900 ≤ 1000 (但示例输出为950,说明还有其他组合) F1=100 F2=300 F3=500 F4=400 F5=400 F6=150 F7=100 另一个滑窗:500+400+50? 实际为500+400+150=1050>1000 所以最大为950(400+400+150)
写完代码点「提交」,将对全部测试用例判题。

向老师提问

针对「区块链文件转储系统」把疑问、代码和报错填清楚,老师收到后能更快、更准地回复你。