タイトルの説明
長さNの指定された整数シーケンスAの場合、その「サブシーケンス」は、Aの空でない連続要素(整数)として定義されます。タスクは、可能なすべてのサブシーケンスの中からサブシーケンスを見つけることです。サブシーケンスのすべての要素の合計が最大になります(他のすべてのサブシーケンスと比較して)。プログラムでは、この最大値を出力する必要があります。
入力
入力ファイルの最初の行には整数Nが含まれ、2番目の行にはNの整数、つまりAが含まれています。
ここで、
1 <= N <= 100000
-10000 <= A [i] <= 10000アウトプット
出力には整数のみが含まれ、計算した答えを示します。
入力例
5 3 -2 3 -5 4出力例
4
元のタイトルリンク:最大サブシーケンス
#include<cstdio>
#include<cmath>
#include<iostream>
#include<algorithm>
using namespace std;
int num[100010];
int main(){
int n;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&num[i]);
}
//2种可能: 1.把新来的数加进当前序列 2.以新来的数重开一个序列 取二者大的情况
int res=num[0]; //最终结果
int sum=num[0]; //sum:当前序列和
for(int i=1;i<n;i++){
sum += num[i]; //当前的sum加上新来的数
sum = max(sum,num[i]); //看看是这种情况大,还是新来的数重开序列大 ,取大的情况
res = max(sum,res); //看看这一次的决策是否能够更新结果呢
}
cout<<res;
return 0;
}