質問の意味:
配列へのあなたには、いくつかの接頭辞を置くことができると、-1を掛けた後、接尾辞と-1を掛け、そこに最大の一連の操作の後に、接尾語が続くプレフィックスの間のオーバーラップすることとどのくらいに尋ねることができます
アイデア:
私たちは、最初に乗るために二回、重複を検討-1、同じのすべての重複部分を、プログラムに対する答えが重複部分を持たないように
我々は、操作後のアレイとされ、すべての要素和、想定中期から反対と考察がSであると仮定する(合計- - S)+ S = 2 * S -合計
そこで問題は、サブシーケンスの問題を見つける最大に変換されます
書式#include <iostreamの> の#include <アルゴリズム> 使用して 名前空間はstdを、 const int型 MAXN = 1E5 + 10 。 int型[MAXN]。 int型のmain() { int型 N、和= 0 。 scanf関数(" %のD "、&N) 以下のために(INT iが= 1 ; <I = N; I ++ ){ scanf関数(" %のD "、および[I])。 和 + = [I]。 } INT MX、CNT = 0 。 以下のために(INT iが= 1 ; I <= N; I ++ ){ CNT + = A [i]は、 もし(CNT < 0)、CNT = 0 。 MX = MAX(MX、CNT)。 } COUT << 2 * MX-和<< ENDL。 リターン 0 ; }