当前位置: 首页 > news >正文

扫描线优化DP + 单调队列优化DP

扫描线优化 \(DP\)

扫描线的功能其实就是可以二维数点。

例题:P3431 [POI 2005] AUT-The Bus

这道题其实有两种做法,一种是树状数组维护\(x\)\(y\),另一种是cdq分治。

  1. 树状数组

这种方法是最简单的,因为我们按照\(x\)\(y\)排序之后,就可以用树状数组来维护另一维即可。

代码:

戳我喵~
#define lowbit(x) x & (-x)int n, m, k, M;
array<int, 3> a[N], b[N];
int tree[N];
int Y[N];void update(int x, int add) {for (; x <= M; x += lowbit(x)) tree[x] = max(tree[x], add);
}int query(int x) {int ans = 0;for (; x; x -= lowbit(x)) ans = max(ans, tree[x]);return ans;
}signed main() {n = re, m = re, k = re;for (int i = 1; i <= k; i++) a[i][0] = re, a[i][1] = re, a[i][2] = re, Y[i] = a[i][1];sort(Y + 1, Y + 1 + k);//需要离散化!M = unique(Y + 1, Y + 1 + k) - Y - 1;for (int i = 1; i <= k; i++) a[i][1] = lower_bound(Y + 1, Y + 1 + M, a[i][1]) - Y;sort(a + 1, a + 1 + k);for (int i = 1; i <= k; i++) {int cnt = query(a[i][1]) + a[i][2];update(a[i][1], cnt);}wr(query(M)), endl;
}
  1. cdq分治

知周所众,cdq分治可以解决偏序问题,那么这道题就是一个二维偏序+DP模版。

详情见这里。

单调队列优化DP

使用范围

当 DP 状态转移方程式长得像下面式子的都可以用单调队列优化 DP

\[dp_i = \max_{L_i \le j \le R_i}(dp_j + F(i) + G(j)) \]

因为 \(F(i)\) 对于在枚举的 \(j\) 中,他就是一个定值,所以可以分离出来,那么式子就变成了:

\[dp_i = F(i) + \max_{L_i \le j \le R_i}(dp_j + G(j)) \]

所以用滑动窗口就能维护了。

例题:P1714 切蛋糕

\(dp_i\) 表示以 \(i\) 结尾的最大子段和, \(sum_i\) 表示前缀和。

那么方程为:

\[dp_i = \max_{i - M \le j \le i - 1}(sum_i - sum_j) \]

那么分离定值,就变成了:

\[dp_i = sum_i + \max_{i - M \le j \le i - 1}(-sum_j) \]

那么就是维护 \(\min_{i - M \le j \le i - 1}(sum_j)\)

那么就简单了。

戳我喵~
int cnt[N];signed main() {int n = re, m = re;for (int i = 1; i <= n; i++) cnt[i] = cnt[i - 1] + re;deque<int> q;q.push_back(0);int ans = -1e9;for (int i = 1; i <= n; i++) {while(!q.empty() && q.front() + m < i) q.pop_front();while (!q.empty() && cnt[q.back()] >= cnt[i]) q.pop_back();q.push_back(i);if (q.front() != i) ans = max(ans, cnt[i] - cnt[q.front()]);else ans = max(ans, cnt[i] - cnt[i - 1]); //特判,有可能全是负的,但是必须选}wr(ans), endl;
}
http://www.jsqmd.com/news/418322/

相关文章:

  • IT-Tools+cpolar 让开发者效率拉满的黄金搭档
  • 北京GEO服务商怎么选?2026年三大AI获客方案解析 - 品牌2025
  • 第10.2章 机器人自动驾驶 C++ 实战总结(二):彻底搞懂PCL点云智能指针
  • 获取citect当前项目的存放路径
  • vllm部署qwen3-32b模型,推理服务兼容openai服务API 支持openclaw调用
  • C++游戏开发之旅 18
  • 第10.1章 机器人自动驾驶 C++ 实战总结(一):一眼看出是模板类还是模板函数
  • Remix 表单操作深度解析
  • 从内容到转化,如何打通AI获客链路?2026年DeepSeek推广服务商全景观察 - 品牌2025
  • AI搜索流量争夺战:2026年DeepSeek推广服务商能力图谱 - 品牌2025
  • 时间序列异常检测的5种方法:从统计阈值到深度学习
  • P3030 [USACO11NOV] Tile Exchanging S 题解
  • 谁在主导AI获客新赛道?2026年DeepSeek推广服务商能力拆解 - 品牌2025
  • 国家统计局数据中心
  • Mac清理存储
  • DeepSeek能获客吗?2026年DeepSeek推广服务商全景解析 - 品牌2025
  • Sigstore在CI/CD中的签名验证集成:软件测试从业者的安全新防线
  • 冷热电气综合能源系统优化调度模型:粒子群算法应用与多方案对比研究
  • AI获客不再靠碰运气:2026年DeepSeek推广服务商能力对照 - 品牌2025
  • 实时同步机制:版本快照防内容更新延迟
  • esbuild超快构建深度解析
  • 生物特征加密的伦理风险矩阵与测试应对策略
  • AI流量入口争夺战:2026年DeepSeek推广服务商能力图谱 - 品牌2025
  • 如何使用 LiteLLM 网关代理统一管理你的大模型
  • 终于有人把MySQL OCP认证说清楚了
  • 使用 SQLAlchemy ORM 管理爬虫数据库
  • 停停,昨日请不要再重现(2022南京区域赛)题解
  • 爬虫数据备份与多地同步方案
  • 主流IM SDK对比
  • Vite 依赖优化深度解析