返回首页 返回题库

环线

C++ 中等 GESP六级真题 #动态规划#前缀和#单调队列#环形数组

题目描述

题面描述

小A喜欢坐地铁。地铁环线有个车站,依次以标号。车站( )的下一个车站是车站。特殊地,车站的下一个车站是车站。

小A会从某个车站出发,乘坐地铁环线到某个车站结束行程,这意味着小A至少会经过一个车站。小A不会经过一个车站多次。当小A乘坐地铁环线经过车站时,小A会获得点快乐值。请你安排小A的行程,选择出发车站与结束车站,使得获得的快乐值总和最大。

输入格式

第一行,一个正整数,表示车站的数量。

第二行,个整数,分别表示经过每个车站时获得的快乐值。

输出格式

一行,一个整数,表示小A能获得的最大快乐值。

样例1

输入:

4
-1 2 3 0

输出:

5

样例2

输入:

5
-3 4 -5 1 3

输出:

5

数据范围

对于20%的测试点,保证。

对于40%的测试点,保证。

对于所有测试点,保证,。

时间限制

1.0 s

内存限制

512.0 MB

💡 查看提示(先自己想一想再看)
本题考察环形数组的最大子段和问题,核心思路是将环形数组展开为长度为2n的普通数组,转化为求长度不超过n的最大子段和,可通过前缀和搭配单调队列实现O(n)时间复杂度的解法。需要注意数据范围较大,需使用long long类型避免整数溢出。
⚙ 开始做这道题 0 人做过 · 0 收藏 · 3 浏览

讨论(0)