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

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

环状最大两段子段和

你怎么知道我只会了 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;
}
http://www.jsqmd.com/news/36327/

相关文章:

  • Archery + LDAP 一体化部署
  • 2025年热门的高尔夫观光车厂家最新权威实力榜
  • 2025年11月上海财税公司十大推荐:靠谱机构汇总与高性价比选课技巧
  • 2025.11.10
  • C++设计模式之行为型模式:迭代器模式(Iterator) - 详解
  • 2025年评价高的金钻绒厂家实力及用户口碑排行榜
  • springboot mybaits 连接多数据源
  • 写博客怕内容被偷?SSR 实现安全加密的原理讲解
  • 数据库变量使用
  • 2025年11月上海财税公司十大推荐:主流机构排行榜与高性价比选择指南
  • 2025 运维监控厂商选型全指南:选对监控工具筑牢运维根基,助力企业数字化转型
  • 逆向基础--C++ 作用域、常量、修饰符类型 (03)
  • 2025年石棉橡胶板厂家联系电话推荐:精选老牌企业速查指南
  • 2025年石棉橡胶板厂家联系电话推荐:源头工厂直联通道
  • 2025年石棉橡胶板厂家联系电话推荐:五强厂家速查指南
  • 2025年评价高的真丝绒热门厂家推荐榜单
  • 2025年比较好的镭射激光灯厂家推荐及选购参考榜
  • 2025年杭州刑事律师权威推荐榜单:劳动纠纷律师/刑事律师/离婚律师团队精选
  • 2025年11月geo优化公司推荐:知名机构排行榜与口碑评价对比指南
  • 2025年11月geo优化公司推荐:知名机构排行榜与口碑评价
  • win 端口进程管理
  • P14467 [COCI 2025/2026 #1] 扔球 / Krugomet 题解
  • 【ACM出版、EI检索稳定】2025年人工智能、业务转型和数据科学创新国际学术会议(ICBTDS 2025)
  • 2025年石棉橡胶板厂家联系电话推荐:采购避坑与售后无忧
  • MATLAB实现海浪数据处理与谱分析
  • VP 2023CCPC Harbin
  • 路由器和静态路由配置实验(2)
  • 离散数学作业 251103
  • 解码LVGL中文字体、输入框、键盘
  • 2025年比较好的钢塑课桌椅优质厂家推荐榜单