SJTU OJ 1006 求和游戏

本文介绍了一种算法问题,即在给定的一排带有整数的键盘中找到两个键,使得这两键及其间的数字和最大。文章提供了问题的输入输出格式、样例,并附带了一个C++实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Description

石柱上有一排石头键盘,每个键上有一个整数。请你在键盘上选择两个键,使这两个键及其之间的键上的数字和最大。如果这个最大的和不为正,则输出“Game Over"。

Input Format

第1行:键的个数n。

第2..n+1行:键上的数字整数 a i

100a i 100

对于70%的数据,2n1,000

对于100%的数据,2n1,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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值