思路
从第二个箱子开始遍历,每次可以移动的石子数量受到次数和箱子内石子的数量两个条件限制,每次取两种限制下的最小石子数量加到第一个箱子内并减去相应次数,直到遍历完所有的箱子或者次数用尽。
代码 + 注释
test = int(input())
for _ in range(test):
n, d = map(int, input().split())
a = list(map(int, input().split()))
for i in range(1, n):
t = min(d // i, a[i]) # 每次最多可以移动的石子数量
d -= t * i # 移动石子需要的次数
a[0] += t
print(a[0])