首先,回合数越少越好。我们发现,让boss剩下最多(但是在一个回合内能够击杀)的血量时回合数最少
把boss的血量状态压缩,然后进行枚举,代码如下:
#include <bits/stdc++.h>
#define R register
#define ll long long
#define cmin(a, b) ((a < b) ? a : b)
#define cmax(a, b) ((a < b) ? b : a)
const int MaxN = 2e5 + 10;
typedef std::pair<int, int> pa;
ll h, n;
ll d[MaxN], sum[MaxN];
int main()
{
scanf("%lld%lld", &h, &n);
for (int i = 1; i <= n; i++)
scanf("%lld", &d[i]), sum[i] = sum[i - 1] + d[i];
for (int i = 1; i <= n; i++)
if (h + sum[i] <= 0)
return 0 * printf("%d\n", i);
if (sum[n] >= 0)
return 0 * printf("-1");
ll min = *std::min_element(sum + 1, sum + n + 1);
ll cnt = (h + min - 1) / (-sum[n]) + 1;
h += cnt * sum[n];
for (int i = 1; i <= n; i++)
if (h + sum[i] <= 0)
return 0 * printf("%lld\n", i + cnt * n);
return 0;
}



京公网安备 11010502036488号