Description
石柱上有一排石头键盘,每个键上有一个整数。请你在键盘上选择两个键,使这两个键及其之间的键上的数字和最大。如果这个最大的和不为正,则输出“Game Over"。
Input Format
第1行:键的个数n。
第2..n+1行:键上的数字整数 a i 。
−100≤a i ≤100
对于70%的数据,2≤n≤1,000
对于100%的数据,2≤n≤1,000,000
Output Format
一行,最大和或者”Game Over"。
Sample Input
5
3
-5
7
-2
8
Sample Output
13
Sample Input
3
-6
-9
-10
Sample Output
Game Over
注意是两个键之间,需要加一个flag判断一下
#include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <algorithm> #include <cmath> #include <string> #include <sstream> #include <vector> #include <queue> #include <set> #include <map> #include <ctime> #define MAXN 1000 #define offset 10000 #define eps 1e-8 #define PI acos(-1.0)//3.14159265358979323846 #define exp 2.718281828 using namespace std; typedef long long LL; int num[1000010]; int dp[1000010]; int main(){ int n; while(scanf("%d",&n) != EOF){ for(int i = 0 ; i<n;i++){ scanf("%d",&num[i]); } int minn = -100000000; int flag = 0; //int minflag = -1; for(int i = 0;i<n;i++){ if(dp[i-1] + num[i] < 0){ flag = 0; dp[i] = 0; }else{ dp[i] = dp[i-1] + num[i]; flag ++; } if(dp[i] > minn && flag > 1){ minn = dp[i]; //minflag = } // minn = max(dp[i],minn); } if(minn > 0){ printf("%d\n",minn); }else{ printf("Game Over\n"); } } return 0; }