优化工厂工人效率安排代码以避免超时问题
### 😥问题分析 原代码的时间复杂度是 $O(NK)$,在 $N$ 和 $K$ 较大时,可能会导致超时(TLE)。可以使用单调队列来优化内层循环,将时间复杂度降低到 $O(N)$。 ### 📝优化思路 使用单调队列来维护一个滑动窗口,窗口内存储的是可以用来更新 $dp$ 数组的候选位置。这样在每次更新 $dp[i]$ 时,就可以 $O(1)$ 的时间找到最优的候选位置。 ### 💻优化后的代码 ```cpp #include <iostream> #include <vector> #include <algorithm> using namespace std; const int MAXN = 1e5 + 5; int n, k; long long efficiency[MAXN], prefixSum[MAXN], dp[MAXN]; int q[MAXN]; // 单调队列 int main() { cin >> n >> k; for (int i = 1; i <= n; ++i) { cin >> efficiency[i]; prefixSum[i] = prefixSum[i - 1] + efficiency[i]; } int hh = 0, tt = -1; q[++tt] = 0; for (int i = 1; i <= n; ++i) { // 移除超出窗口范围的元素 while (hh <= tt && q[hh] < i - k - 1) ++hh; // 更新 dp[i] dp[i] = max(dp[i - 1], dp[q[hh]] + prefixSum[i] - prefixSum[q[hh]]); // 维护单调队列的单调性 while (hh <= tt && dp[q[tt]] <= dp[i - 1]) --tt; q[++tt] = i - 1; } cout << dp[n] << endl; return 0; } ``` ### 📌代码解释 1. **前缀和数组 `prefixSum`**:用于快速计算任意区间的效率和。 2. **单调队列 `q`**:用于维护一个滑动窗口,窗口内存储的是可以用来更新 $dp$ 数组的候选位置。 3. **更新 `dp` 数组**: - 对于每个 $i$,先移除超出窗口范围的元素。 - 然后更新 $dp[i]$,取不选择第 $i$ 个工人和选择连续工人的最大值。 - 最后维护单调队列的单调性,将 $i - 1$ 加入队列。 ### 🌟复杂度分析 - **时间复杂度**:$O(N)$,因为每个元素最多入队和出队一次。 - **空间复杂度**:$O(N)$,主要用于存储 $dp$ 数组和前缀和数组。 ######[AI写代码神器 | 653点数解答 | 2026-08-15 16:16:42]
- 多线程实现自行车生产线:含图形界面与同步机制的生产者 - 消费者问题解决方案( | 713点数解答 | 2023-12-29 15:42:06)450
- 滑动窗口最大值与最大工作效率问题的C++解法(DeepSeek | 1739点数解答 | 2026-08-15 16:13:42)3
- 聚焦五方面突出问题,提升工作质效筑牢党建根基 (字节豆包 | 1200点数解答 | 2025-08-18 16:48:50)132
- 破解党建五大突出问题,提升工作落实质效推动全面从严治党纵深发展(字节豆包 | 925点数解答 | 2025-08-18 16:49:44)177
- 聚焦党建五方面问题,强化工作落实质效为复兴梦护航(字节豆包 | 949点数解答 | 2025-08-18 16:49:48)145
- 解析React 15与Vue 2:从O(n^3)到O(n),Diff算法时间复杂度计算及性能对比 (阿里通义 | 379点数解答 | 2023-11-09 01:49:19)438
- 缜密逻辑,全新无名杀“风餐”技能代码精心打造与深度解析 (字节豆包 | 469点数解答 | 2025-04-05 11:37:06)391
- 精准优化:明确需求,开启高效提升之旅! (字节豆包 | 52点数解答 | 2026-02-09 16:44:46)163
- 代码再升级:优化版“获取dump”代码,多机制保障数据读取与保存(字节豆包 | 734点数解答 | 2026-02-10 01:23:31)156
- 代码深度优化:全面检查异常、灵活读取内存,提升可读性与可维护性(字节豆包 | 959点数解答 | 2026-02-10 01:24:14)130
- 浙闽“板凳龙”舞龙队 300 秒螺线盘入:位置与速度全揭秘(阿里通义 | 886点数解答 | 2024-09-07 10:31:31)736
- 浙闽“板凳龙”舞龙队 300 秒位置与速度数学模型揭秘(GPT | 565点数解答 | 2024-09-07 10:32:56)615