news 2026/4/15 16:45:29

AtCoder Beginner Contest竞赛题解 | 洛谷 AT_abc438_d Tail of Snake

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AtCoder Beginner Contest竞赛题解 | 洛谷 AT_abc438_d Tail of Snake

​欢迎大家订阅我的专栏:算法题解:C++与Python实现!
本专栏旨在帮助大家从基础到进阶 ,逐步提升编程能力,助力信息学竞赛备战!

专栏特色
1.经典算法练习:根据信息学竞赛大纲,精心挑选经典算法题目,提供清晰的代码实现与详细指导,帮助您夯实算法基础。
2.系统化学习路径:按照算法类别和难度分级,从基础到进阶,循序渐进,帮助您全面提升编程能力与算法思维。

适合人群:

  • 准备参加蓝桥杯、GESP、CSP-J、CSP-S等信息学竞赛的学生
  • 希望系统学习C++/Python编程的初学者
  • 想要提升算法与编程能力的编程爱好者

附上汇总帖:AtCoder Beginner Contest竞赛题解 | 汇总


【题目来源】

洛谷:AT_abc438_d Tail of Snake - 洛谷

【题目描述】

Snuke 正在观察一条蛇,他很好奇蛇的头部、蛇身和蛇尾分别是哪个部分。他把蛇分成了N NN块,并评估了每个块的头部相似度、身体相似度和尾部相似度。然后,他决定找出使相似值总和最大的分割方法。

给你长度为N NN的整数序列A = ( A 1 , A 2 , … , A N ) A = (A_1, A_2, \ldots, A_N)A=(A1,A2,,AN)B = ( B 1 , B 2 , … , B N ) B = (B_1, B_2, \ldots, B_N)B=(B1,B2,,BN)C = ( C 1 , C 2 , … , C N ) C = (C_1, C_2, \ldots, C_N)C=(C1,C2,,CN)

求满足1 ≤ x < y < N 1 \le x < y < N1x<y<N的一对整数( x , y ) (x, y)(x,y),最大化∑ i = 1 x A i + ∑ i = x + 1 y B i + ∑ i = y + 1 N C i \displaystyle\sum_{i = 1}^{x} A_i + \sum_{i = x + 1}^{y} B_i + \sum_{i = y + 1}^{N} C_ii=1xAi+i=x+1yBi+i=y+1NCi的值。

【输入】

输入内容由标准输入法提供,格式如下

N NN
A 1 A_1A1A 2 A_2A2… \ldotsA N A_NAN
B 1 B_1B1B 2 B_2B2… \ldotsB N B_NBN
C 1 C_1C1C 2 C_2C2… \ldotsC N C_NCN

【输出】

输出答案。

【输入样例】

5 1 4 2 4 3 2 3 4 2 2 3 2 4 4 3

【输出样例】

16

【算法标签】

《洛谷 AT_abc438_d Tail of Snake》 #动态规划DP# #前缀和#

【代码详解】

#include<bits/stdc++.h>usingnamespacestd;#defineintlonglong// 定义int为long long,防止溢出constintN=300005;intn;// 天数inta[N],b[N],c[N];// 每天的三种选择intsa[N],sb[N],sc[N];// 前缀和数组inttmp[N];// 后缀最大值数组signedmain()// signed是int的别名,因为定义了#define int long long{// 输入天数cin>>n;// 输入a数组并计算前缀和safor(inti=1;i<=n;i++){cin>>a[i];sa[i]=sa[i-1]+a[i];// sa[i] = a[1]到a[i]的和}// 输入b数组并计算前缀和sbfor(inti=1;i<=n;i++){cin>>b[i];sb[i]=sb[i-1]+b[i];// sb[i] = b[1]到b[i]的和}// 输入c数组并计算前缀和scfor(inti=1;i<=n;i++){cin>>c[i];sc[i]=sc[i-1]+c[i];// sc[i] = c[1]到c[i]的和}// 预处理tmp数组:从后往前计算后缀最大值// tmp[i] = max_{j>=i} (sb[j] + (sc[n] - sc[j]))for(inti=n-1;i>1;i--){// 比较当前值sb[i] + 从i+1到n的c的和 与 后面的最大值tmp[i+1]tmp[i]=max(tmp[i+1],sb[i]+sc[n]-sc[i]);}// 输出调试信息(注释部分)// for (int i=1; i<=n; i++)// cout << tmp[i] << " ";// cout << endl;// for (int i=2; i<n; i++)// cout << tmp[i] << " ";// cout << endl;// 计算最终答案intans=-1;for(inti=1;i<n;i++){// 公式:sa[i] + tmp[i+1] - sb[i]ans=max(ans,sa[i]+tmp[i+1]-sb[i]);}cout<<ans<<endl;return0;}

【运行结果】

5 1 4 2 4 3 2 3 4 2 2 3 2 4 4 3 16
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/12 9:39:01

从零构建线程安全的渲染系统:C++游戏引擎优化必知的6个核心组件

第一章&#xff1a;从零构建线程安全的渲染系统&#xff1a;核心理念与架构设计在现代图形应用开发中&#xff0c;渲染系统不仅要处理复杂的视觉效果&#xff0c;还需应对多线程环境下的并发访问。构建一个线程安全的渲染系统&#xff0c;首要任务是明确资源所有权与访问边界&a…

作者头像 李华
网站建设 2026/4/11 0:27:38

Conda env list查看所有TensorFlow相关环境

高效管理 TensorFlow 开发环境&#xff1a;从 Conda 到容器化实践 在人工智能项目日益复杂的今天&#xff0c;一个常见的痛点浮出水面&#xff1a;为什么同样的代码&#xff0c;在同事的机器上跑得好好的&#xff0c;到了你的环境里却报错不断&#xff1f;更别提那些因 CUDA 版…

作者头像 李华
网站建设 2026/4/13 11:30:22

C++开发者必看,GCC 14对C++26并发支持究竟进展到哪一步了?

第一章&#xff1a;C26并发特性概述与GCC 14支持背景C26 正在成为现代C并发编程演进的关键版本&#xff0c;其核心目标是进一步简化多线程开发、增强异步操作表达能力&#xff0c;并提供更高效的底层控制机制。尽管 C26 标准尚未最终冻结&#xff0c;但主要编译器厂商已开始前瞻…

作者头像 李华
网站建设 2026/4/8 23:55:20

揭秘C++网络模块异步化改造:5大核心步骤让你系统吞吐提升10倍

第一章&#xff1a;C网络模块异步化改造的背景与意义在现代高性能服务器开发中&#xff0c;C因其高效的执行性能和底层控制能力被广泛应用于网络服务的构建。然而&#xff0c;传统的同步阻塞式网络编程模型在面对高并发请求时暴露出明显的性能瓶颈&#xff0c;主要体现在线程资…

作者头像 李华
网站建设 2026/4/5 4:59:29

白盒测试和黑盒测试详解

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快对于很多刚开始学习软件测试的小伙伴来说&#xff0c;如果能尽早将黑盒、白盒测试弄明白&#xff0c;掌握两种测试的结论和基本原理&#xff0c;将对自己后期的学习…

作者头像 李华