1467 藍橋杯2019初賽 字尾表示式

2021-10-23 05:28:56 字數 1119 閱讀 7453

題目

給定n 個加號、m 個減號以及n + m + 1 個整數a1,a2,...,an+m+1。

小明想知道在所有由這n 個加號、m 個減號以及n + m +1個整數湊出的合法的字尾表示式中,結果最大的是哪乙個?

請你輸出這個最大的結果。

例如使用1 2 3 + -,則「2 3 + 1 -」 這個字尾表示式結果是4,是最大的。

思路

讀完題後,覺得很常規很簡單。最大值無非就是先排序,把從最大的那一頭開始相加,最小的那一頭相減即可。按照題目的例子測試了一下,發現也沒啥問題,結果一提交就錯誤了。

很顯然,我沒有考慮到可以有括號出現的情況。例如:

1 21 2 3 4

=》4 + 3 - (1 - 2) = 4 + 3 + 2 - 1

相當於只有乙個減號。此時的題目,要麼就沒有減法,要麼減法只能為1。

同時,允許有負數存在!因此我們需要根據減法數目與總個數之間的關係進行討論。

如果負數數目不等於總個數,則所有負數可以轉換為正數(負負得正)。

如果負數的數目等於總個數,那麼必然會剩下乙個負數不能轉換成正數。

有減法(只能為1次,也就是排序後的最小值)

有負數負數數目不等於總數目

負數數目等於總數目(選擇絕對值最小負數)

沒有負數

沒有減法

**

1//1467: [藍橋杯2019初賽]字尾表示式

2#include 3using namespace std;

4int a[200010]; 

5int main()

17    sort(a, a + num);

18    if(m) 

27            } 

28            else 

33            }

34        } 

35        else

39    }

40    //如果沒有減法,則最大值就直接是所有數的和

41    cout<42    return 0;

43}

藍橋杯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 ...