当前位置: 首页 > 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.rkmt.cn/news/45234.html

相关文章:

  • C++设计模式之行为型模式:迭代器模式(Iterator) - 详解
  • 2025年杭州刑事律师权威推荐榜单:劳动纠纷律师/刑事律师/离婚律师团队精选
  • 2025年11月geo优化公司推荐:知名机构排行榜与口碑评价对比指南
  • 【ACM出版、EI检索稳定】2025年人工智能、业务转型和数据科学创新国际学术会议(ICBTDS 2025)
  • MATLAB实现海浪数据处理与谱分析
  • 路由器和静态路由配置实验(2)
  • 解码LVGL中文字体、输入框、键盘
  • 无法处理文件 Launcher.resx,因为它位于 Internet 或受限区域中,或者文件上具有 Web 标记。要想处理这些文件,请删除 Web 标记。
  • 2025 年 11 月建筑资质办理/转让/新办/收购/代办厂家推荐排行榜,消防维保/总包/劳务/地基基础工程/电子与智能化工程/消防设施工程/防水防腐保温工程资质公司推荐
  • 2025 年 11 月地坪厂家推荐排行榜,环氧地坪漆,聚氨酯地坪,固化耐磨地坪,防腐地坪,室外路面防滑地坪,运动地面,PVC塑胶地板,魔石地坪公司推荐
  • 2025年评价高的耐甲酸涂料TOP实力厂家推荐榜
  • 一次通过Wireshark排查DLP系统因IP变动运行异常的经历
  • 2025年热门的反弹器厂家推荐及选购指南
  • 如何利用outlook大附件插件解决大文件传输难题?
  • 检查SSD是否开启了trim
  • ubuntu24.04: 安装python 3.10.19
  • 2025年口碑好的活性炭空气过滤器厂家最新TOP实力排行
  • AtCoder Beginner Contest 431 题解
  • 2025年轻钢龙骨厂家权威推荐榜单:龙骨/卡式龙骨/隔墙龙骨源头厂家精选
  • 摄影提示词
  • firewalld防火墙关闭后telnet仍然不通的原因
  • 2025年11月北京律师推荐排名榜:行业白皮书视角下的十位优质律师
  • 2025年北京生态原产地保护产品认证机构权威推荐榜单:生态原产地保护产品认证证书/生态原产地保护产品认证管理办法/生态原产地保护产品认证办理时长源头机构精选。
  • 2025年11月北京律师推荐榜:权威评测十家律所与律师服务排行
  • 2025年热门的东莞平板硫化机最新TOP厂家排名
  • 2025 年 11 月防腐木厂家推荐排行榜,防腐木地板,防腐木花架,防腐木凉亭,防腐木围栏,防腐木批发公司推荐
  • 实用指南:Linux内核架构浅谈38-Linux页表结构:四级页表(PGD、PUD、PMD、PTE)的实现解析
  • 解锁高效协作:好用的跨网文件安全交换系统来袭!
  • SWD访问DP和AP的区别。
  • 2025年上海离婚房产律所权威推荐榜单:婚姻律所/离婚事务所/继承律所团队精选