该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。
噜噜发现了糖果宝库
1. 题目背景
小探险家噜噜和它聪明的小伙伴“一只羊”发现了一个古老的糖果宝库!宝库里有 N 排糖果堆,但拿取这些糖果有一个奇特的规则。作为未来的编程高手,噜噜希望你能帮它计算一下,按照这个规则它最多能拿到多少糖果。
2. 问题描述
一共有 N 堆糖果,从左到右依次编号为 1,2,…,N。第 i 堆糖果有 ai 颗。
噜噜会从第一堆开始,依次决定从每一堆糖果中拿出多少颗。拿取规则如下:
- 对于第一堆糖果 (编号为1),噜噜会拿出 a1 颗糖果 (即,它会拿走第一堆中的全部糖果)。
- 对于第 i 堆糖果 (当 i>1 时),设噜噜从前面 i−1 堆(即编号为 1 到 i−1 的所有堆)中总共拿出的糖果数量之和为 Si−1。噜噜从第 i 堆可以拿出的糖果数量 ti 必须满足以下两个条件:
- ti≤ai (不能超过当前堆本身拥有的糖果数)。
- ti≤Si−1 (不能超过前面所有堆已拿出糖果的总和)。
- 如果 Si−1=0 (即前面没有拿出任何糖果),则 ti 必须为 0。
噜噜总是想在规则允许的范围内,从当前考虑的堆中拿出尽可能多的糖果。请你计算,按照这个规则,噜噜最终能拿到的糖果总数。
3. 输入格式
第一行一个整数 N,表示糖果的堆数。
第二行 N 个整数 a1,a2,…,aN,用空格隔开,表示每堆糖果的数量。
4. 输出格式
一个整数,表示噜噜按照规则最多能拿出的糖果总数。
5. 样例输入与输出
样例输入 1:
4
10 3 7 2
样例输出 1:
22
样例解释 1:
- 第1堆 (a1=10): 噜噜拿出 a1=10 颗。
- 已拿出糖果总和 S1=10。 最终收集到的总糖果数 = 10。
- 第2堆 (a2=3): 前面已拿出糖果总和 S1=10。
- 噜噜可拿出 min(a2,S1)=min(3,10)=3 颗。
- 已拿出糖果总和 S2=S1+3=10+3=13。 最终收集到的总糖果数 = 10 + 3 = 13。
- 第3堆 (a3=7): 前面已拿出糖果总和 S2=13。
- 噜噜可拿出 min(a3,S2)=min(7,13)=7 颗。
- 已拿出糖果总和 S3=S2+7=13+7=20。 最终收集到的总糖果数 = 13 + 7 = 20。
- 第4堆 (a4=2): 前面已拿出糖果总和 S3=20。
- 噜噜可拿出 min(a4,S3)=min(2,20)=2 颗。
- 已拿出糖果总和 S4=S3+2=20+2=22。 最终收集到的总糖果数 = 20 + 2 = 22。
最终,噜噜最多能拿出 22 颗糖果。
样例输入 2:
5
5 12 3 20 8
样例输出 2:
34
样例解释 2:
- 第 1 堆(a_1=5):取走 5,累计 S_1=5,总共取走 5。
- 第 2 堆(a_2=12):受限于 S_1=5,取走 min(12,5)=5,累计 S_2=5+5=10,总共取走 5+5=10。
- 第 3 堆(a_3=3):受限于 S_2=10,取走 min(3,10)=3,累计 S_3=10+3=13,总共取走 10+3=13。
- 第 4 堆(a_4=20):受限于 S_3=13,取走 min(20,13)=13,累计 S_4=13+13=26,总共取走 13+13=26。
- 第 5 堆(a_5=8):受限于 S_4=26,取走 min(8,26)=8,累计 S_5=26+8=34,总共取走 26+8=34。
6. 数据规模与约定
对于所有测试数据,满足 1≤N≤105,0≤ai≤109。
子任务编号 |
N 的范围 |
ai 的范围 |
特殊约定 |
分值比例 |
1 |
1≤N≤10 |
0≤ai≤100 |
无 |
20% |
2 |
1≤N≤1000 |
0≤ai≤1000 |
3 |
1≤N≤105 |
ai∈{0,1} |
所有 ai 只会是0或1 |
4 |
1≤N≤60 |
0≤ai≤109 |
a1 较大 (>0)。对于 i>1, ai 的值足够大,保证 ai≥Si−1 总是成立 (除非 Si−1 超过 109, 此时 ai 取 109)。主要测试累加和的快速增长。 |
5 |
1≤N≤105 |
无,为完整数据范围。 |