NYOJ1170最大數(解析貪心)

2021-07-15 05:46:06 字數 969 閱讀 1590

最優解:

#include//本題就是在找1,妥善的處理每乙個1就會得出正確的結果

void jia(int *a,int x,int y)

if(a[x]==0) x--;//當有2的時候會在前面出現乙個0,那麼就把標記移動到前面的那個3上

a[x]<=a[y]?a[x]++:a[y]++;//優先向左加,因為是從左向右貪心,那麼右面所出現的東西是未知的,所以向左加,比如4 1 4 1

}int a[10002];

int main()

for(i=0,sum=1; i最大的數

時間限制:1000 ms  |  記憶體限制:65535 kb

難度:3

描述小明和小紅在打賭說自己數學學的好,於是小花就給他們出題了,考考他們誰nb,題目是這樣的給你n個數

在這n個數之間新增n-1個*或+,使結果最大,但不可以打亂原順序,請得出這個結果

如1 3 5

結果是(1+3)*5=20;最大

可以新增若干個括號,但一定要保證配對,但是每兩個數之間只可能有乙個*或+

數列最前和最後不應有+或乘

小明想贏小紅但是他比較笨,請你幫幫他

輸入多組測試資料以eof結束,每組有乙個n(n<10000),然後有n個正整數a[i](1<=a[i]<=20)

輸出輸出最大的結果由於結果比較大,結果對10086取餘

樣例輸入

31 2 3

35 1 2

樣例輸出915

很好的一道貪心題:

給出一些不含1的正整數那麼必有a+b<=a*b當a=2&&b=2時a+b=a*b;所以如果所給數中不存在1則直接相乘。如果存在1則考慮將1加到它左邊的數還是右邊的數已知當a+b一定時a==b時a*b取最大值。因此將1加到它兩邊較小的數上即可。考慮當左邊的數為2時如果它右邊的數比2大則應加在右邊如果右邊的數為1  因為當a==2時b==2a+b==a*b所以應讓前面的數大所以將1直接加到2上。既考慮2 1 1 2

NYOJ1170(最大的數)(貪心?)

時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述 小明和小紅在打賭說自己數學學的好,於是小花就給他們出題了,考考他們誰nb,題目是這樣的給你n個數 在這n個數之間新增n 1個 或 使結果最大,但不可以打亂原順序,請得出這個結果 如 1 3 5 結果是 1 3 5 20 最大 可...

NYOJ1170 最大的數

時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述 小明和小紅在打賭說自己數學學的好,於是小花就給他們出題了,考考他們誰nb,題目是這樣的給你n個數 在這n個數之間新增n 1個 或 使結果最大,但不可以打亂原順序,請得出這個結果 如 1 3 5 結果是 1 3 5 20 最大 可...

NYOJ 1170 最大的數

時間限制 1000 ms 記憶體限制 65535 kb 難度 3描述 小明和小紅在打賭說自己數學學的好,於是小花就給他們出題了,考考他們誰nb,題目是這樣的給你n個數 在這n個數之間新增n 1個 或 使結果最大,但不可以打亂原順序,請得出這個結果 如 1 3 5 結果是 1 3 5 20 最大 可以...