description這是leetcode上一道題的變形,那道題目是不同是連續數的個數至少為1,直接掃一遍就可以了。這道題目略麻煩一些,需要增加判斷連續子列長度是否至少為2。石柱上有一排石頭鍵盤,每個鍵上有乙個整數。請你在鍵盤上選擇兩個鍵,使這兩個鍵及其之間的鍵上的數字和最大。如果這個最大的和不為正,則輸出「game over」。
input format
第1行:鍵的個數n。
第2..n+1行:鍵上的數字整數 ai。
−100≤ai≤10
對於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
13sample input
3 -6
-9 -10
sample output
game over
思路是基於「前面掃過小於零就重置」的思想,再對特例進行處理。
#include
using
namespace
std;
int main();
int ans = -1;
bool f = false;
int last;
bool lastf = false;
while(n--) //由於可能出現 負數 + 正數為極大值的情況,所以對每乙個pair進行求和,lastf是為了避免第乙個數的情況
if(sum<0)
else f = true; //如果大於等於零就留下,繼續後掃
last = t;
lastf = true;
}cout
<<(ans<=0?"game over":to_string(ans));
}
sjtu oj 1006 求和遊戲
考慮到資料量,不可能建立等長的陣列 也沒有意義 需要做的只是記錄最小累計值 minn 並且每讀入乙個值 tem 就將目前的累計值 now 與最小值比較,更小則替代,答案 ans 取當前累計值與最小值的差值 考慮到題目要求,ans小於等於0時輸出game over 注意,以上變數都為long long...
1006 求和遊戲
石柱上有一排石頭鍵盤,每個鍵上有乙個整數。請你在鍵盤上選擇兩個鍵,使這兩個鍵及其之間的鍵上的數字和最大。如果這個最大的和不為正,則輸出 game over 第1行 鍵的個數n。第2.n 1行 鍵上的數字整數 ai ai。100 ai 100 100 ai 100 對於70 的資料,2 n 1,000...
1006 求和遊戲
這道題目和最大連續子串行不同的是,要求子串行至少包含兩個元素。用 sum i 表示sigma,即字首和 用 m i min m 0 0 這樣 sum i m i 2 就表示以 i 結尾的至少包含兩個元素的最大連續子串行和,所以問題可以表示為求 ans min 1 include 2 3 define...