尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Luogu P1121 环状最大两段子段和 题解 [ 绿 ] [ 分类讨论 ] [ 线性 DP ]

Luogu P1121 环状最大两段子段和 题解 [ 绿 ] [ 分类讨论 ] [ 线性 DP ]
📅 发布时间:2026/6/20 13:38:32

环状最大两段子段和

你怎么知道我只会了 DDP 断环为链的做法???????

观察两段最大子段和的形态,发现只可能有下面两种情况:

  • \(\texttt{......AAAAA.....BBBBBB....}\)。
  • \(\texttt{AAAAA.....BBBBBB....AAAAAA}\)。

第一种情况是好做的,直接求前后缀的非空最大子段和,枚举中间的分割点即可。

考虑第二种。发现直接 DP 并不好做,因为有三段被选中。但是我们注意到不被选的部分只有两段。于是我们对这两段求一个最小子段和即可,用总和减去两段的最小子段和即为答案。

注意求最小子段和的时候,两侧不能选完整个序列。因此我们可以拆成两部分计算贡献:

  • \([2, l], [r, n - 1]\) 的贡献,在这里面选一定不会把整个序列选中。
  • \([1, l - 1], [r + 1, n]\) 的贡献,\(l - 1, r + 1\) 是因为必须保证不选中整个序列。

时间复杂度 \(O(n)\)。

#include <bits/stdc++.h>
#define fi first
#define se second
#define eb(x) emplace_back(x)
#define pb(x) push_back(x)
#define lc(x) (tr[x].ls)
#define rc(x) (tr[x].rs)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef long double ldb;
using pi = pair<int, int>;
const int N = 200005;
const ll inf = 0x3f3f3f3f3f3f3f3f;
ll n, a[N], f[N], g[N], ans = -inf, sm = 0;
int main()
{//freopen("sample.in", "r", stdin);//freopen("sample.out", "w", stdout);ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> n;ll pre = 0;for(int i = 1; i <= n; i++){cin >> a[i];sm += a[i];}    for(int i = 2; i <= n; i++){pre = a[i] + min(0ll, pre);f[i] = min(f[i - 1], pre);}    pre = 0;for(int i = n - 1; i >= 1; i--){pre = a[i] + min(0ll, pre);g[i] = min(g[i + 1], pre);}pre = 0;for(int i = 1; i <= n; i++){f[i] = min(f[i], min(f[i - 1], pre));pre += a[i];}pre = 0;for(int i = n; i >= 1; i--){g[i] = min(g[i], min(g[i + 1], pre));pre += a[i];}    for(int i = 1; i < n; i++) ans = max(ans, sm - f[i] - g[i + 1]);pre = 0;f[0] = -inf;for(int i = 1; i <= n; i++){pre = a[i] + max(0ll, pre);f[i] = max(f[i - 1], pre);}      pre = 0;g[n + 1] = -inf;for(int i = n; i >= 1; i--){pre = a[i] + max(0ll, pre);g[i] = max(g[i + 1], pre);}          for(int i = 1; i < n; i++) ans = max(ans, f[i] + g[i + 1]);cout << ans;return 0;
}

相关新闻

  • C++设计模式之行为型模式:迭代器模式(Iterator) - 详解
  • 2025年杭州刑事律师权威推荐榜单:劳动纠纷律师/刑事律师/离婚律师团队精选
  • 2025年11月geo优化公司推荐:知名机构排行榜与口碑评价对比指南

最新新闻

  • 2026年宁波AI搜索优化公司全面权威横向评测与选型决策指南 - 品牌报告
  • 嵌入式GUI开发实战:深度解析emWin三大数值调节控件
  • 邢台厨卫屋顶防水修缮三家对比测评 吉修匠 99.8 分 - 吉修匠
  • 零投诉零纠纷!2026沈阳黄金回收标杆品牌合扬实力认证 - 奢侈品交易观察员
  • 夸克网盘链接解析直链链接_在线解析网盘链接
  • 【图像隐写】基于DWT、SVD和扩频技术混合可见-隐形水印系统(将彩色标志和强大的隐藏水印嵌入图像中附Matlab代码

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号