nyoj1170最大的數

題目鏈接:http://acm.nyist.net/JudgeOnline/problem.php?pid=1170
http://115.159.40.116/problem_show.php?pid=5696

題目描述

小明和小紅在打賭說自己數學學的好,於是小花就給他們出題了,考考他們誰NB,題目是這樣的給你N個數
在這n個數之間添加N-1個*或+,使結果最大,但不可以打亂原順序,請得出這個結果
1 3 5
結果是(1+3)*5=20;最大
可以添加若干個括號,但一定要保證配對,但是每兩個數之間只可能有一個*或+
數列最前和最後不應有+或乘
小明想贏小紅但是他比較笨,請你幫幫他

輸入

多組測試數據以EOF結束,每組有一個n(n<10000),然後有n個正整數a[i](1<=a[i]<=20)

輸出

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

樣例輸入

3
1 2 3
3
5 1 2

樣例輸出

9
15

/*題目炸看上去挺複雜,又是+*又是可以加括號的。 
其實找幾組數一算髮現只有出現1的地方需要用加法,
ps:至於怎麼加、加在哪可自行思考 
先在數組中掃一遍1,同時先計算加法(相當於添加括號)
然後累乘即可
我的程序需要注意幾組特殊數據
1
1
12
1 1 1 1 1 1 1 1 1 1 1 1
4
2 1 1 2
答案分別是 
1
81
9 
*/
#include <stdio.h>
int main() {
	int n, num[10005], i;
	while(~scanf("%d", &n)) {
		num[0] = 21, num[n+1] = 21;
		for(i = 1; i <= n; i++) scanf("%d", &num[i]);
		if(n > 1) {//考慮特殊數據 
		 for(i = 1; i <= n; i++) {
			if(num[i] == 1) {								/*考慮特殊數據*/ 
				if(num[i-1] <= num[i+1] || (num[i-1]==2&&num[i+1]==1)) {
					num[i] += num[i-1];
					num[i-1] = 1;
				} else {
					num[i+1]++;
					i++;//只是爲了減少一些不必要的循環 
				}
			}
		 }
	  }
		for(i = 2; i <= n; i++) num[1] = (num[1]*num[i])%10086;
		printf("%d\n", num[1]);
	}
	return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章