资讯动态

P1115 最大子段和

发布时间:2026/10/14 3:23:08 来源:尧图企业网站定制
题目链接P1115 最大子段和 - 洛谷最优思路#includebits/stdc.h using namespace std; int main() { int n; cin n; vectorlong long arr(n); vectorlong long arr2(n); for (int i 0; i n; i) { cin arr[i]; } arr2[0] arr[0]; for (int i 1; i n; i) { arr2[i] arr2[i - 1] arr[i]; } long long m 0; long long ans -9223372036854775808; for (int i 0; i n; i) { ans max(ans, arr2[i] - m); m min(m, arr2[i]); } cout ans; return 0; }思路想要求一段区间的最大和与和有关的优先考虑前缀和一段区间的和为l r为该区间左右下标sum[l,r] sum[0,l] - sum[0,r-1];想要sum[l,r]最大sum[0,l]尽量大sum[0,r-1]尽量小于是就遍历一下前缀和数组其中设置一个m来存历史之前的的最小前缀和这样就实现了 sum[0,r-1]尽量小的目的m min(m, arr2[i]);然后再设一个ansans初始化为了 -9223372036854775808也就是long long类型的人最小数字也可以用LLONG_MIN代替因为数组里的数可以是小于0的如果初始化为0就照顾不到负数了再与历史值和当前最大段和比较在遍历的过程的也实现sum[0,l]尽量大最后找到答案

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑