A93498.最优分段

提高+/省选-

官方

通过率:0%

时间限制:1.00s

内存限制:128MB

题目描述

给定一个包含 nn 个整数的数组 aa。你需要将 aa 划分为若干个连续且非空的子数组。

对任意子数组 al,al+1,,ara_l,a_{l+1},\ldots,a_r,令 s=al+al+1++ars=a_l+a_{l+1}+\cdots+a_r,它的价值定义为:

  • 如果 s>0s>0,价值为 (rl+1)(r-l+1)
  • 如果 s=0s=0,价值为 00
  • 如果 s<0s<0,价值为 (rl+1)-(r-l+1)

你可以用任意方式把整个数组切成若干段(每个元素必须属于且只属于一段)。问:所有子数组价值之和的最大值是多少?

输入格式

第一行一个整数 tt,表示测试数据组数。

每组测试数据:

  • 第一行一个整数 nn
  • 第二行 nn 个整数 a1,a2,,ana_1,a_2,\ldots,a_n

输出格式

每组测试数据输出一行一个整数,表示最大总价值。

输入输出样例

  • 输入#1

    5
    3
    1 2 -3
    4
    0 -2 3 -4
    5
    -1 -2 3 -1 -1
    6
    -1 2 -3 4 -5 6
    7
    1 -1 -1 1 -1 -1 1

    输出#1

    1
    2
    1
    6
    -1

说明/提示

样例解释

例如第一组:可以分成 [1,2][1,2][3][-3]

  • 1+2>01+2>0,价值是 22
  • 3<0-3<0,价值是 1-1
    总价值 2+(1)=12+(-1)=1,这是最优答案。
首页