#include<bits/stdc++.h>
using namespace std;
#define int long long
const int maxn = 1e6 + 5;
int a[maxn], l[maxn], r[maxn], pre_max[maxn], suf_max[maxn], m, n;
bool mp[105];
void solve(){
int k;
int x;
cin >> n;
int minn = 1e18;
for(int i = 1; i <= n; i++){
cin >> a[i];
l[i] = a[i] + i - 1;//l[i]表示打完i左边所有怪兽再打i所需的最少攻击力
r[i] = a[i] + n - i;//r[i]表示打完i右边所有怪兽再打i所需的最少攻击力
}
for(int i = 1; i <= n; i++){
pre_max[i] = max(pre_max[i - 1], r[i]);//r的前缀最大值
}
for(int i = n; i >= 1; i--){
suf_max[i] = max(suf_max[i + 1], l[i]);//l的后缀最大值
}
for(int i = 1; i <= n; i++){//枚举第一次攻击的怪兽
int tmp = max({a[i], pre_max[i - 1], suf_max[i + 1]});//瓶颈是当前怪兽,或者是左边的怪兽(打完它右边所有的怪兽再打它),或者是右边的怪兽
minn = min(minn, tmp);
}
cout << minn << '\n';
/*
6
1 1 1 6 1 1
*/
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
int T = 1;
//cin >> T;
while(T--){
solve();
}
return 0;
}
有n个怪兽,初始攻击力为x,打n次,打完一次x-1,第一次攻击哪只怪兽可以随便选择,除了第一次攻击,只能攻击已被攻击的怪兽的相邻怪兽(随机打),求最坏情况下能消灭所有怪兽的x最小值
最新推荐文章于 2025-12-02 15:32:05 发布
这篇文章介绍了如何使用C++解决一个关于怪兽战斗的问题,通过计算攻击顺序的最优策略,找到最少的攻击力要求。利用前缀和后缀最大值动态规划求解攻击序列的瓶颈。
830

被折叠的 条评论
为什么被折叠?



