本文主要是介绍SJTU OJ 1006 求和游戏,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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; }
这篇关于SJTU OJ 1006 求和游戏的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!