【問題描述】
給定 n 個加號、m 個減號以及 n + m + 1 個整數 a1, a2, ··· , an+m+1,小明想知道在所有由這 n 個加號、m 個減號以及 n + m +1 個整數湊出的合法的
字尾表示式中,結果最大的是哪乙個?
請你輸出這個最大的結果。
例如使用1 2 3 + -,則 「2 3 + 1 -」 這個字尾表示式結果是 4,是最大的。
【輸入格式】
第一行包含兩個整數 n 和 m。
第二行包含 n + m + 1 個整數 a1, a2, ··· , an+m+1。
【輸出格式】
輸出乙個整數,代表答案。
【樣例輸入】
1 11 2 3
【樣例輸出】
如果是中綴表示式,那麼加號就是加,減號就是減。但是字尾表示式可以通過加括號把減號變成加號,因此這道題可以理解為可以任意加括號的中綴表示式。
如果減號的個數為0,就直接把所有的數相加。如果減號的個數不為0,則最少有乙個減號,可以把其他的減號全都放進乙個括號裡,括號外只保留乙個減號。那麼就可以轉換為只做一次減法。要使字尾表示式值最大,則減去的那個數應該最小。
注意資料有負數,應該加上絕對值。另外不允許減號前面沒有數字,例如-(1-2-3),所以要用最大數減去最小數,再把其他數的絕對值加上。第一次做的時候沒有考慮到這一點,把最小數之後的所有數先加上,最後再減去最小數,如果資料全是負數的話就錯了,相當於在括號外只加了乙個負號,這種情況是不允許的。
#include
#include
#include
using
namespace std;
typedef
long
long ll;
const
int n =
200100
;ll a[n]
, res;
intmain()
else
cout
}
藍橋杯2019初賽 字尾表示式
藍橋杯2019初賽 字尾表示式 時間限制 1 sec 記憶體限制 256 mb 題目描述 給定n 個加號 m 個減號以及n m 1 個整數a1,a2,an m 1 小明想知道在所有由這n 個加號 m 個減號以及n m 1 個整數湊出的合法的字尾表示式中,結果最大的是哪乙個?請你輸出這個最大的結果。例...
2019藍橋杯初賽 字尾表示式
藍橋賽前練練手 字尾表示式可以模擬任意加括號的結果 所以相當於給出n個加號,m個減號,n m 1個數,用這些任意組成乙個式子,使結果最大 用大寫字母表示正數,小寫字母表示負數 最優的情況是n m 1個數中,有n 1個正數,有m個非正數 即構成a b c d a b c形式 結果就是絕對值之和 在此基...
藍橋杯 2019初賽 字尾表示式 思維
給定n 個加號 m 個減號以及n m 1 個整數a1,a2,an m 1 小明想知道在所有由這n 個加號 m 個減號以及n m 1 個整數湊出的合法的字尾表示式中,結果最大的是哪乙個?請你輸出這個最大的結果。例如使用1 2 3 則 2 3 1 這個字尾表示式結果是4,是最大的。第一行包含兩個整數n ...