读一个处理一个即可,数组下标恰好是将其移动到蒂一个箱子所需的代价(次数)。
时间复杂度
$O(n)$
C++ 代码
#include <iostream>
using namespace std;
int n, d;
int main()
{
int T;
scanf("%d", &T);
while (T -- )
{
scanf("%d%d", &n, &d);
int res = 0;
int q;
for (int i = 0; i < n; i ++ )
{
scanf("%d", &q);
while( (d - i ) >= 0 && q)
{
res += 1;
d -= i;
q --;
}
}
cout << res << endl;
}
return 0;
}