算法1
模拟 + 贪心
- 从第一个盒子开始存石子,然后从离第一个最近的盒子离移动石子,移动需要的步数为
i
,可以移动的数量为x
或d/i
(最小值)
时间复杂度 $O(n)$
参考文献
C++ 代码
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
int T;
cin >> T;
while(T --)
{
int n, d;
cin >> n >> d;
int res = 0;
for(int i = 0; i < n; i ++)
{
int x;
cin >> x;
if(!i) res += x;
else
{
int t = min(x, d / i);
res += t;
d -= t * i;
}
}
cout << res << endl;
}
return 0;
}