酷代码 AI
菜单
服务商
DeepSeek字节豆包
更多选项

麻醉炮弹问题:计算连续k名守卫的最大危险程度总和

### 📝分析思路 本题可使用滑动窗口算法来解决。滑动窗口是一种在数组或字符串上进行迭代处理的技术,通过维护一个固定大小的窗口,在数组上滑动,从而找出满足条件的最大子数组和。 具体步骤如下: 1. **初始化**:读取输入的 `n` 和 `k`,以及每个守卫的危险程度数组 `a`。 2. **计算初始窗口和**:计算前 `k` 个人的危险程度总和,作为初始的最大危险程度总和。 3. **滑动窗口计算**:从第 `k+1` 个人开始,依次向右滑动窗口,每次滑动时,减去窗口最左边的人的危险程度,加上窗口最右边的人的危险程度,更新最大危险程度总和。 4. **输出结果**:输出最大危险程度总和。 ### 💻代码实现 ```cpp #include <iostream> #include <algorithm> using namespace std; const int MAXN = 100005; int a[MAXN]; int main() { int n, k; cin >> n >> k; // 读取每个守卫的危险程度 for (int i = 1; i <= n; i++) { cin >> a[i]; } int sum = 0; // 计算前 k 个人的危险程度总和 for (int i = 1; i <= k; i++) { sum += a[i]; } int ans = sum; // 滑动窗口计算 for (int i = k + 1; i <= n; i++) { // 减去窗口最左边的人的危险程度,加上窗口最右边的人的危险程度 sum = sum - a[i - k] + a[i]; ans = max(ans, sum); } // 输出最大危险程度总和 cout << ans; return 0; } ``` ### 📝代码解释 1. **数组 `a`**:用于存储每个守卫的危险程度。 2. **计算初始窗口和**:通过一个 `for` 循环计算前 `k` 个人的危险程度总和,存储在变量 `sum` 中,并将其作为初始的最大危险程度总和 `ans`。 3. **滑动窗口计算**:从第 `k+1` 个人开始,每次滑动窗口时,减去窗口最左边的人的危险程度 `a[i - k]`,加上窗口最右边的人的危险程度 `a[i]`,更新 `sum` 的值,并更新最大危险程度总和 `ans`。 4. **输出结果**:最后输出最大危险程度总和 `ans`。 ######[AI问答 | 634点数解答 | 2026-08-01 20:12:20]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]