UVA 10684 - The jackpot
題目:
有一個人想要快速的致富而且不用太辛苦工作,他決定要在以賭場作為生涯職場。所以他開始研究別的賭客輸贏的情況,這樣他才能制訂一個贏的策略。由於他不懂電腦,所以他雇用你寫一個程式來幫助他。
你首先的任務是寫一個程式在一連串的賭局中辨識出連續的賭局最大可能贏的錢。每場賭局以一個整數來表示贏或輸的金額。正數代表贏,負數代表輸。例如:有6局賭局金額如下:
-99 10 -9 10 -5 4
連續的賭局最大可能贏的錢為 11,出現在第2,3,4這連續三局中。
Input
每組測試資料的第一列有一個正整數 N <= 10000 ,代表數列的長度。接下來有N個整數(絕對值小於1000),代表這N局賭局輸贏的金額。
當N= 0 代表輸入結束。請參考Sample Input。
Output
對每組測試資料輸出一列,在這N局賭局中,連續的賭局最大可能贏的錢是多少。
如果輸入的資料不可能贏錢,則輸出 "Losing streak."
輸出格式請參考Sample Output。
Sample Input #1
6
-99 10 -9 10 -5 4
3
-999 100 -9
5
12 -4 -10 4 9
3
-2 -1 -2
0
Sample Output #1
The maximum winning streak is 11.
The maximum winning streak is 100.
The maximum winning streak is 13.
Losing streak.
C++ code:
#include<bits/stdc++.h>
using namespace std;
int main(){
int t;
while (cin >> t) {
if (t == 0) {
break;
}
vector<int> a(t);
for (int i = 0; i < t; ++i) {
cin >> a[i];
}
int ma = 0;
int cu = 0;
for (int i = 0; i < t; ++i) {
cu = max(a[i], cu + a[i]);
ma = max(ma, cu);
}
if (ma > 0) {
cout << "The maximum winning streak is " << ma << "." << endl;
}
else {
cout << "Losing streak." << endl;
}
}
}